ViewController A、そのviewModel AVMがあるとします。 AにはviewController BとviewModel BVMというcontainerViewがあります。 AにはBの参照があり、AVMにはその子ビューモデルとしてのBVMの参照があります。iOSで子MVVMを使用するMVVMはどのように動作しますか?
そして、I BはUIImageViewを有しとsetSDImage(URL)機能を有しているマネージャークラスであるCは、
B.
からそのようなsetSDImage(URL)などのBの関数を呼び出し、Bの挙動を制御しますコールバック。ボタンが押されたときにボタンが押されたときに はのsetSDImage(URL)をトリガーします。問題は次のとおりです。Aボタンを押してAVMに行き、AVMに連絡してC関数呼び出しがUIレイヤーであるsetSDImage(url)であるため、CはBの参照を取得しなければなりません。また、コールバックは、私はそうではなくB.
よりBVMにこの作業を取得する方法がわからない理由です、同様にBに実装する必要があり、この場合の質問:
1、マネージャクラスCはBの動作を制御します.AVはBの参照を渡さずにCとどのように接触しますか? (VMはViewController /ビューについて知りたくないので)
2、マネージャークラスCはBまたはBVMを制御する必要がありますか?私はそれがBVMの代わりにBを制御するので、a)設定されたイメージ関数はBであるUILayerで行われなければならないからです。b)コールバックはUILayerで実装する必要がありますか?
返信用Thx。私は画像をダウンロードするためにSDWebImageライブラリを使用しています。それらの機能は '' '[' '' ['' NSWRL URLWithString:@ "https://graph.facebook.com/olivier.poitrey/picture"]です。 オプション:SDWebImageRefreshCached]; '' '。つまり、私はビューコントローラでそれをやっているはずです。 UIImageViewではなくUIImageViewに直接設定されているためです。 –
私は「UIView」の拡張機能のファンではありません。技術的には、コードはビューには実装されていませんが、ビューにそのビヘイビアが関連付けられているため、MVCとMVVMの違反のように感じられます。ただし、UIImageの代わりにURLを渡しても、同じパターンに従うことができます。 MVVMの鍵は、VCがVMと直接通信できることですが、VMはプロトコルやKVOなどの間接的な方法でVCとの間でのみ通信します。 –