2014-09-22 108 views
35

HAs任何人在iOS應用程序中實現了MVVM模式而不使用ReactiveCocoa?iOS中的MVVM示例/示例實現

在這裏找到很多例子,但他們都使用反應可可。我想要一個MVVM實現的簡單例子。

+2

你的問題是有趣的,但過於寬泛。你有什麼考慮?否則,你應該看看這兩篇博客文章:[Swift:使用MVVM處理可選項](http://natashatherobot.com/swift-mvvm-optionals/)和[MVVM簡介](http:// www.objc.io/issue-13/mvvm.html)。您也可以閱讀以下主題:[重寫Objective-C中的代碼以符合Swift電源工具和簡潔的風格](http://codereview.stackexchange.com/questions/62958/rewrite-code-from-objective-c-to -conform與 - 迅速,電力工具和簡潔-STYL)。 Rob Mayoff給出的優秀答案使用MVVM設置。 – 2014-10-03 23:57:02

+2

GitHub上的另一個Swift MVVM示例[here](https://github.com/shilgapira/SwiftDemoMVVM)。 – 2014-10-04 13:41:42

+0

如果您的系統可以幫助您進行數據綁定,那麼您只能採用MVVM。在iOS中,這幾乎肯定會成爲KVO機制。您需要這樣做才能避免爲每個媒體資源編寫自己的更改跟蹤代碼。 ReactiveCocoa是將KVO API與通知和異步數據流統一在一起的最成熟的項目,一旦學習結束後,它將非常強大。我建議不要試圖避免它,但實際上要擁抱它。 – fatuhoku 2014-11-15 09:22:26

回答

40

MVVM肯定不需要Reactive Cocoa。我已經構建了一個非常成功的MVVM框架,完全沒有任何綁定。綁定不是MVVM的要求。

具體來說,視圖模型和視圖之間的鏈接確實要求視圖模型向視圖發信號通知它需要更新其數據。這可以通過使用Reactive Cocoa,KVO(我非常喜歡Facebook的KVOController),甚至使用簡單的委託模式來實現。

視圖模型知道視圖何時需要更新 - 數據已更改,或者通過模型發出異步數據請求,並且該模型已加載到視圖模型中。

設置視圖時,可以將每個控件綁定到視圖模型上的對應值。我發現,當我需要製作屏幕時,這會變得非常乏味。相反,我寧願有一個方法,當視圖模型指示視圖應該自行更新時調用。在那個方法中,我只需要設置我所有的控件屬性。

現在,您只需要關心自己如何觸發該方法。在我的個人框架中,我利用KVO和ViewControllers監視ViewModel基類的timestamp屬性。任何時候,我的視圖模型都會更新其基礎數據,其更新時間戳會觸發更新。您可以輕鬆地將View Controller註冊爲ViewModel的更新委託並使用標準的委託模式。另外,MVVM不是關於具體的實現需求,更多的是關於高級關注點分離,依賴關係解耦和封裝的概念。

+1

這是一個很好的閱讀http://rasic.info/bindings-generics-swift-and-mvvm/ – DogCoffee 2015-03-25 14:30:57

+0

我已經非常有效地使用委託模式。 – SilentNot 2015-12-23 14:59:58

+0

OP請求一個簡單的例子。 – nmdias 2016-12-11 09:30:30

1

我創建使用MVVM一個簡單的項目:模型 - 視圖 - 視圖模型

請查看以下鏈接Github上:

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

+0

你什麼時候想創建/附加你的項目的另一半?數據收集似乎已經完成了一半...... – holex 2017-12-13 10:39:44