適合自己的才是最好的
先介紹下MVC和MVVM
MVC
模型(Model):數(shù)據(jù)保存
視圖(View):用戶界面
控制器(Controller):業(yè)務(wù)邏輯
結(jié)合項(xiàng)目我們的MVC結(jié)構(gòu)
結(jié)構(gòu)
一個(gè)Controller 持有若干view 這些view可能復(fù)雜的嵌套若干View
一個(gè)Controller 持有若干model
事件傳遞
Controller將處理好的數(shù)據(jù)一層層向下分發(fā)到對(duì)應(yīng)的View
View響應(yīng)到的事件一層一層往上傳遞,最終由Controller來(lái)處理
Controller 處理所有的邏輯 數(shù)據(jù) 頁(yè)面跳轉(zhuǎn) 十分臃腫 不方便單元測(cè)試
在網(wǎng)查詢?nèi)舾商煨6粒瑳](méi)有的到相應(yīng)的結(jié)果 網(wǎng)上的 基本都是這樣的
iOS 開(kāi)發(fā)的基本單位Controller: 講清楚了一個(gè)Controller,應(yīng)該就算整個(gè)講清楚了 這個(gè)圖好像不能講清楚一個(gè)Controller里面的結(jié)構(gòu)
咨詢了安卓的同事 安卓有原生的雙向綁定 iOS 沒(méi)有
當(dāng)前使用的方案: OC: OC + RAC Swift:Swift + Rxswift
找到了不錯(cuò)的項(xiàng)目 SwiftHub 這個(gè)項(xiàng)目只適用于結(jié)構(gòu)簡(jiǎn)單的View
還有一種
每一個(gè)View 對(duì)應(yīng)一個(gè)ViewModel 有些View只是展示數(shù)據(jù) 感覺(jué)并不需要對(duì)應(yīng)ViewModel 這是一個(gè)大佬寫的 感謝 但找不到原文地址了
MVVM
相對(duì)于MVC Controller 里面提取出來(lái)了所有的邏輯處理
Controller 持有ViewModel ViewModel 負(fù)責(zé)邏輯處理
Controller 負(fù)責(zé)UIKit跳轉(zhuǎn)
對(duì)于復(fù)雜的View邏輯處理 可以另外增加相應(yīng)的ViewModel 做邏輯處理
ViewModel 不含有UIKit的東西 可以方便的單元測(cè)試 移植
ViewModel 繼承于公共的ViewModel BaseView BaseView 里面可以打印下 釋放 這樣 在控制器銷毀的時(shí)候 BaseViewModel 銷毀會(huì)打印出來(lái) 沒(méi)有打印的話 就是有循環(huán)引用了
搜集到的RxSwift相關(guān)文獻(xiàn):
MVVM + RxSwift
RxSwift中文文檔
https://beeth0ven.github.io/RxSwift-Chinese-Documentation/
參考閱讀 RxSwift+MVVM
https://github.com/khoren93/SwiftHub
RxSwift
https://blog.csdn.net/kyl282889543/category_8866507.html