有了前面兩篇的基礎(chǔ)宏浩,我們通過(guò)具體的例子來(lái)說(shuō)明這個(gè)架構(gòu)是怎么布局的知残,然后我們一步步的實(shí)現(xiàn)它們。接下來(lái)绘闷,我們一大家熟悉的用戶登錄來(lái)做介紹橡庞,比如我們有這樣的一個(gè)登錄界面,下圖:
需求有较坛,那就讓我們動(dòng)手去實(shí)現(xiàn)它的整個(gè)流程:
第一步:用xcode打我們的項(xiàng)目印蔗,新建一個(gè)framework(File->New->Target->Cocoa Touch Framework),命名為Services,導(dǎo)入NetworkAPI的framework以及其他用使用的第三方framework,首先,先定義login接口的Router,如下:
接著丑勤,實(shí)現(xiàn)登錄的service方法华嘹,新建一個(gè)AccountServices的文件,具體如下:
由于法竞,我們需要把用登錄數(shù)據(jù)本地化耙厚,這邊使用sugarrecord(具體使用查看GitHub)來(lái)簡(jiǎn)化coredata數(shù)據(jù)的存儲(chǔ),User(Model,跟建services framework的方式一樣)的定義如下:
同時(shí)岔霸,使用了ObjectMapper把JSON轉(zhuǎn)化為Model(User),具體使用方法這邊就不做介紹薛躬,請(qǐng)查看GitHub文檔。
第二步呆细,從第一步我們實(shí)現(xiàn)這個(gè)架構(gòu)的Services層和Model層型宝,接下來(lái)我們要實(shí)現(xiàn)就是為View層提供可監(jiān)聽的屬性(Property)與可執(zhí)行的動(dòng)作(Action)的ViewModel層,跟前面類似新建一個(gè)ViewModel的framework絮爷,具體如下:
主要有兩個(gè)文件趴酣,分別為ViewModelBase.Swift和LoginViewModel.swift,我們整個(gè)用戶登錄邏輯到這邊基本都實(shí)現(xiàn)了,就差怎么運(yùn)用View層坑夯,由于岖寞,整個(gè)登錄界面是用代碼寫的,使用到UITableView, 用戶輸入的值是通過(guò)delegate傳出來(lái)的柜蜈,所以這邊使用Action傳入輸入?yún)?shù)的方式實(shí)現(xiàn)仗谆,如果使用storyboard畫界面的,可以考慮屬性綁定的方式淑履,ViewModel的就應(yīng)該這么寫了隶垮,如下:
綁定,其實(shí)很簡(jiǎn)單鳖谈,類似如下圖所示:
最后一步岁疼,也就是View層,不管是用代碼寫的界面,還是storyboard畫的界面捷绒,上面的兩種ViewModel的實(shí)現(xiàn)都可以用瑰排,主要看那種使用其他比較方便,要做的事情比較就好了暖侨。我這邊運(yùn)用的是第一種椭住,是由于比較適合我運(yùn)用場(chǎng)景,大致的代碼如下:
到此字逗,整個(gè)架構(gòu)的布局就完成了京郑,大致可以歸為:Model -> Services -> ViewModel -> View,我們這邊在Model與ViewModel之間插入一個(gè)Services層,主要是為了分離調(diào)用API邏輯實(shí)現(xiàn)的部分葫掉,減少ViewModel的負(fù)擔(dān)些举,讓其看起來(lái)比較輕量級(jí)。
就到此了俭厚!