web-dev-qa-db-ja.com

iOSでのMVVMサンプル/実装例

ReactiveCocoaを使用せずにiOSアプリにMVVMパターンを実装した人はいますか?

ここで多くの例を見つけましたが、それらはすべてReactive Cocoaを使用しています。 MVVM実装の簡単な例が必要でした。

36
Smitha

MVVMにはReactive Cocoaは絶対に必要ありません。バインディングなしで非常に成功したMVVMフレームワークを構築しました。バインディングはMVVMの要件ではありません。

具体的には、View ModelとViewの間のリンクでは、View Modelがデータを更新する必要があることをViewに知らせる必要があります。これは、Reactive Cocoa、KVO(FacebookのKVOControllerが本当に好きです)、または単純なデリゲートパターンを使用することでも実現できます。

ビューモデルは、ビューの更新が必要なタイミングを認識しています。データが変更されたか、モデルを介して非同期データリクエストを行っており、モデルがビューモデルにロードされています。

ビューを設定するときに、各コントロールをビューモデルの対応する値にバインドできます。私はスクリーンをかき回す必要があるとき、これは非常に退屈になることがわかった。代わりに、View ModelがView自体を更新する必要があることを通知するときに呼び出される単一のメソッドが必要です。そのメソッド内で、単純にすべてのコントロールプロパティを設定します。

これで、そのメソッドがどのようにトリガーされるかを気にするだけで済みます。私の個人的なフレームワークでは、KVOを活用し、ViewControllersはViewModelベースクラスのタイムスタンププロパティを監視します。ビューモデルが基になるデータを更新するたびに、タイムスタンプが更新され、更新がトリガーされます。 ViewControllerをViewModelの更新デリゲートとして登録し、標準のデリゲートパターンを使用することも簡単にできます。

繰り返しますが、MVVMは特定の実装要件ではなく、関心の分離、依存関係の分離、およびカプセル化の高レベルの概念に関するものです。

43
Drew Beaupre