理解MVVM
MVVM圖示
- View
由MVC中view和controller組成,負責UI的展示,綁定viewmodel中的屬性,觸發viewmodel中的命令。 - viewModel
從MVC的controller中抽取出來的展示邏輯,負責從model中獲取view所需藥的數據,轉換成view可以展示的數據。并暴露公開的屬性和命令供view進行綁定。 - model
與MVC中的model一致,包括數據模型,訪問數據庫和網絡操作請求。 - binder
在view和viewModel的同步,避免大量繁雜的樣板代碼。
下圖是個人理解
MVVM理解
- controller
持用view對象和viewmodel,通過bindview:viewmodel:方法將view中控件和viewmodel中的數據進行綁定(利用RAC)。 - model
請求服務端數據和本地數據庫數據依然在model中操作。
Demo
一個輸入框和一個按鈕。當用戶輸入了電子郵箱地址、點擊訂閱按鈕后,電子郵箱地址會提交到web服務器上。郵箱地址有效的才能點擊訂閱。
Demo示例
我們先來看雙綁的實現
- (void)bindWithViewModel {
//將viewmode的email屬性與文本框輸入的內容綁定
RAC(self.viewModel, email) = self.emailTextField.rac_textSignal;
//訂閱按鈕響應
self.subscribeButton.rac_command = self.viewModel.subscribeCommand;
//將self.statusLabel的text屬性與viewmodel中的statusMessage綁定
RAC(self.statusLabel, text) = RACObserve(self.viewModel, statusMessage);
}
參考資料
http://blog.leichunfeng.com/blog/2016/02/27/mvvm-with-reactivecocoa/
http://blog.csdn.net/womendeaiwoming/article/details/37597779