2014-09-22 2 views
35

Как любой реализованный шаблон MVVM в вашем приложении iOS без использования ReactiveCocoa?MVVM Пример/реализация примера в iOS

Здесь представлено множество примеров, но все они используют реактивный какао. Мне нужен простой пример реализации MVVM.

+2

Ваш вопрос интересен, но слишком широк. Что у тебя на уме? В противном случае вы должны взглянуть на эти два сообщения в блоге: [Swift: использование MVVM для работы с опциями] (http://natashatherobot.com/swift-mvvm-optionals/) и [Введение в MVVM] (http: // www.objc.io/issue-13/mvvm.html). Вы также можете прочитать эту тему: [Переписать код из Objective-C, чтобы он соответствовал инструментам Swift power и сжатым стилем] (http://codereview.stackexchange.com/questions/62958/rewrite-code-from-objective-c-to -conform-с-Свифта-силовых инструментов-и-сжатой-Styl). Отличный ответ Роб Майофф использует настройку MVVM. –

+2

Другой пример Swift MVVM на GitHub [здесь] (https://github.com/shilgapira/SwiftDemoMVVM). –

+0

Вы получите только преимущества использования MVVM, если у вас есть система, которая поможет вам привязать данные.В iOS это почти наверняка станет механизмом KVO. Вам понадобится это, чтобы избежать написания собственного кода отслеживания изменений для каждого свойства. ReactiveCocoa - это самый зрелый проект, который объединяет KVO API вместе с уведомлениями и асинхронными потоками и невероятно мощный, как только вы перейдетесь к кривой обучения. Я бы посоветовал не пытаться избежать этого, но на самом деле обнимать его. – fatuhoku

ответ

40

Реактивный какао определенно не требуется для MVVM. Я создал очень успешную структуру MVVM без каких-либо привязок. Привязки не являются обязательными для MVVM.

В частности, связь между View Model и View требует, чтобы View Model выдавала сигнал View, чтобы он обновлял свои данные. Это может быть достигнуто с помощью Reactive Cocoa, KVO (мне действительно нравится KVOController Facebook) или даже с использованием простого шаблона делегата.

Модель просмотра знает, когда необходимо обновить представление - либо данные были изменены, либо вы делаете запрос данных асинхронного запроса с помощью Модели, а Модель загружена в Модель просмотра.

Когда вы настраиваете View, вы можете привязать каждый элемент управления к соответствующему значению в Model View. Я обнаружил, что когда мне нужно выкачать экраны, это может стать очень утомительным. Вместо этого я предпочел бы иметь один метод, который вызывается, когда View Model сигнализирует, что View должен обновлять себя. В рамках этого метода я просто собираюсь установить все свои свойства управления.

Теперь вам нужно только заботиться о том, как этот метод запускается. В моих личных рамках я использую KVO, а мои ViewControllers контролируют свойство timestamp на базовом уровне ViewModel. В любое время, когда мои модели просмотра обновляют свои базовые данные, обновляется его метка времени, которая запускает обновление. Вы также можете легко зарегистрировать контроллер View в качестве делегата обновления ViewModel и использовать стандартный шаблон делегирования.

Опять же, MVVM не касается конкретных требований к внедрению и больше о концепции более высокого уровня разделения проблем, развязки зависимостей и инкапсуляции.

+1

Это хороший прочтение http://rasic.info/bindings-generics-swift-and-mvvm/ – DogCoffee

+0

Я довольно эффективно использовал шаблон делегата. – SilentNot

+0

ОП запросил простой пример. – nmdias

0

Я сделал MVVM Design Pattern в Swift POP с КВЦ подходом. вы можете проверить, нравится ли вам это, это было бы моим удовольствием на GitHub.

https://github.com/AbhimanyuForiOS/ASMVVM Счастливый кодирования !!

1

Я создал простой проект, используя MVVM: Model-View-ViewModel

Пожалуйста, проверьте ниже Github ссылка:

https://github.com/harshal-wani/MVVM-BestPractice

+0

Когда вам нравится создавать/прикреплять другую половину вашего проекта? ожидающие поступления данных выглядят наполовину ... – holex

Смежные вопросы