按照國際慣例先來安利幾篇文章
- ios架構(gòu)模式 - 簡述 MVC长踊,MVP笙各,MVVM 和 VIPER
-
干貨集中營-ReactiveCocoa+RXSwift+MVVM
這篇文章匯總幾乎覆蓋了所有RAC和RX從基礎(chǔ)到實踐的內(nèi)容萧吠。 -
iOS 保持界面流暢的技巧
這篇文章是YYKit作者對如何提升頁面滑動流暢度非常詳盡的解答橄仆,想必很多人都有看過歌豺!
最近在學習 Swift 和 RxSwift桅滋,但是看了許多文章赵辕,似乎并沒有很多可以參考的項目既绩,有一些也屬于Swift2 的demo,所以結(jié)合自己的理解做了個小項目还惠,在此分享出來饲握,旨在與各位互相交流學習,能力有限蚕键,如果其中有失誤或錯誤還請各位多多指正救欧!
1. 什么是MVVM
簡單來說,MVVM是MVC的升級嚎幸,通過VM將Controller中復雜的邏輯層進行分離颜矿,達到Controller瘦身、代碼分離嫉晶、便于測試等目的骑疆,所以又可以被稱為MVCVM,有些同學會這樣理解:哦替废,就是多了個VM箍铭!這個怎么說呢,不能說你錯椎镣,但是會有種搞笑的效果诈火,因為在MVVM和MVC實際上可以說是兩種思想,MVC下的思路是順敘状答,請求-數(shù)據(jù)-展示冷守,但MVVM下則有點像逆敘,你需要先想好拿到數(shù)據(jù)做的事情(Binding)惊科,然后才進行數(shù)據(jù)請求等操作拍摇。更詳細的解釋可以看上文中推薦的文章,借兩張圖幫助大家理解一下馆截!
2. 實踐內(nèi)容
仿 Cineast 項目充活,Demo地址 https://github.com/ChinaBanana/FancyMovie
- API
-
項目結(jié)構(gòu)
image.png- APPDelegate 無需多說
- RootViewController 繼承自TabBarController蜂莉,包含Sections下的三個部分
- General中東西略雜:APIService 所有的網(wǎng)絡(luò)請求都在此文件中實現(xiàn),NavigatorService 實現(xiàn)頁面之間的跳轉(zhuǎn)混卵,其他的為工具類
- Marco中只有一個文件映穗,定義了一些常用的東東
- Sections中每個部分都包含Models,ViewControllers幕随,ViewModels和Views四個部分蚁滋。
可能有同學會剛到疑惑,Service是什么東西赘淮,Service可以看做是對ViewModel的進一步封裝枢赔,舉個列子:當調(diào)用某個網(wǎng)絡(luò)請求時,返回的數(shù)據(jù)可能涉及到多個UI拥知,這時候如果只放在單個UI的VM中時,要刷新多個UI界面邏輯上似乎有點混亂碎赢,而把網(wǎng)絡(luò)請求放到service中后低剔,只要VM發(fā)出請求,Service實現(xiàn)請求肮塞,各個UI界面對Service進行訂閱操作即可刷新UI界面襟齿,這樣邏輯更加清晰疼阔,代碼也更加整潔享幽!
-
第三方
image.png- Alamofire Moya 網(wǎng)絡(luò)請求庫
- Kingfisher 網(wǎng)絡(luò)圖片加載庫
- RxSwift,RxCocoa
- SnapKit 布局工具
- youtube-ios-player-helper YouTube開發(fā)者平臺視頻播放工具吮龄,看上去高大上使用起來非常簡單的視頻播放器拷窜。
- 截圖开皿,找不同
3. 最后 To do list
- 還有一部分功能尚未完成
- 項目中使用了很多Subject,Subject在Rx和RAC中都是一個非常強大的工具篮昧,但這里似乎有點濫用了赋荆,在實現(xiàn)綁定上似乎有更優(yōu)雅的方式,有了解的大大歡迎給出指導建議懊昨!