對于一個 iOS 項目,在搭建項目的時候,使用的架構(gòu)為 MVVM 架構(gòu),需要考慮的有以下幾點:
數(shù)據(jù)模型
網(wǎng)絡(luò)請求
緩存
代碼架構(gòu) - MVVM
圖片加載
工具類
單元測試
一、MVVM架構(gòu)之RxSwift
首先說一下框架,目前比較流行的是MVVM架構(gòu),在OC里,我們用的是ReactiveCocoa這個,想必這個使用的人比較多,大家也比較熟悉。在swift里用的是RxSwift這個,RxSwift就是ReactiveCocoa的swift版。
二、網(wǎng)絡(luò)請求
對于使用Objective-C的開發(fā)者,一定非常熟悉AFNetworking這個網(wǎng)絡(luò)框架。在蘋果推出的Swift之后,AFNetworking的作者專門用Swift來編寫一個類似AFNetworking的網(wǎng)絡(luò)框架,稱為Alamofire。Alamofire地址 >>
三、數(shù)據(jù)模型轉(zhuǎn)換
在OC中,我們有很多優(yōu)秀的第三方庫幫助我們實現(xiàn),比如MJExtension、JSONModel等,這些庫基本都是利用runtime實現(xiàn)讀取屬性名并利用kvc重新賦值屬性。
在Swift中,由于runtime的局限,比較出名的有SwiftyJSON、ObjectMapper等。
那么,今天的主角 HandyJSON就出現(xiàn)了,這個庫是阿里一位大神推出的,能夠做到JSON轉(zhuǎn)Model一步到位,而且使用起來,非常簡潔方便。
關(guān)于HandyJSON原理:
摘自網(wǎng)上一段說明如下:
HandyJSON另辟蹊徑,采用Swift反射+內(nèi)存賦值的方式來構(gòu)造Model實例,保持原汁原味的Swift類定義。
四、網(wǎng)絡(luò)層的進一步封裝
一般我們會在項目中添加一個網(wǎng)絡(luò)請求層,來管理網(wǎng)絡(luò)請求,一般會叫APIManager或者NetworkModel,但是這樣子還是會有一點不好:
這一層比較混亂,不好管理,混合了各種請求
不好做單元測試
但是Moya是專業(yè)處理這些問題而生滴。Moya有以下優(yōu)點:
定義了一個清晰的網(wǎng)絡(luò)結(jié)構(gòu)
更加簡單地進行網(wǎng)絡(luò)單元測試
Moya是作用在Alamofire之上,讓我們不再直接去使用Alamofire了,Moya也就可以看做我們的網(wǎng)絡(luò)管理層,只不過他擁有更好更清晰的網(wǎng)絡(luò)管理??梢钥吹较聢D,我們的APP直接操作Moya,讓Moya去管理請求,不在跟Alamofire進行接觸