項(xiàng)目的開(kāi)始我們必然要面臨一些準(zhǔn)備工作來(lái)做統(tǒng)籌布局(如: 網(wǎng)絡(luò)API的封裝、數(shù)據(jù)處理與UI布局的選擇等等),我們這邊選擇的是Alamofire、ObjectMapper、AlamofireObjectMapper、ReactiveCocoa作為MVVM分層架構(gòu)的現(xiàn)實(shí):
創(chuàng)新互聯(lián)專(zhuān)注于永春企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城開(kāi)發(fā)。永春網(wǎng)站建設(shè)公司,為永春等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
1)運(yùn)用ObjectMapper達(dá)到數(shù)據(jù)之間的相互轉(zhuǎn)化;
2)結(jié)合Alamofire、ObjectMapper、AlamofireObjectMapper與ReactiveCocoa封裝網(wǎng)絡(luò)接口讓數(shù)據(jù)可傳遞、可監(jiān)聽(tīng),為調(diào)用API接口服務(wù)。
3)通過(guò)viewmodel的屬性(Property)和動(dòng)作(Action)給view層提供必要的數(shù)據(jù)和執(zhí)行的動(dòng)作。
上面大致介紹了整個(gè)架構(gòu)的現(xiàn)實(shí)原理,接下來(lái)我們要介紹的網(wǎng)絡(luò)接口封裝的第一步Router協(xié)議的實(shí)現(xiàn)。Router協(xié)議作為網(wǎng)絡(luò)層現(xiàn)實(shí)的一部分,目的就是把API地址轉(zhuǎn)化為更加容易理解的Router名稱(chēng)供其他地方使用,如:
這就是一個(gè)登錄API的現(xiàn)實(shí),RouterConvertible 就是我們所要現(xiàn)實(shí)的router協(xié)議,我們要讓router協(xié)議具備網(wǎng)絡(luò)請(qǐng)求的必要屬性,實(shí)現(xiàn)如下:
從實(shí)際上考慮除了urlPath需要外部提供,headers和paramters是可選的,method和parameterEncoding可以給與默認(rèn)值,在需要的時(shí)候在作調(diào)整,那么如何讓這個(gè)協(xié)議現(xiàn)實(shí)這樣的功能呢?
swift為我們提供了協(xié)議擴(kuò)展,讓我們輕松現(xiàn)實(shí)這樣的功能,如下:
綜上所述,我們的Router協(xié)議的實(shí)現(xiàn)已大功告成!
主項(xiàng)目中的分層主要包含四個(gè)模塊,Main(主要)、Expand(擴(kuò)展)、Resource(資源)、Vender(第三方),還有本項(xiàng)目是有多個(gè)Tag,用于區(qū)分不同的版本,比如本地環(huán)境測(cè)試版、產(chǎn)品版,主要是通過(guò)Tag來(lái)區(qū)分,不同的標(biāo)識(shí)對(duì)應(yīng)不同的連接地址;當(dāng)然也可以設(shè)置其它不同的內(nèi)容;
2.1 Main(主要)模塊的內(nèi)容
此模塊主要目的是為了存放項(xiàng)目的頁(yè)面內(nèi)容,比如MVC的內(nèi)容,Base(基類(lèi))用于存放一些公共的內(nèi)容,其它功能模塊的提取,方便繼承調(diào)用;在本實(shí)例中已經(jīng)在BaseController整理的一個(gè)公用的ViewController
2.2 Expand(擴(kuò)展)模塊的內(nèi)容
此模塊主要包含 Const、Macros、Tool、NetWork、Category、DataBase六個(gè)子模塊;
2.2.1 Macros (宏) 主要存放宏定義的地方,這邊有兩個(gè)宏文件,Macros.h主要是項(xiàng)目的一些主要宏,比如字體、版本、色值等,而ThirdMacros.h主要用于存放一些第三放SDK的key值;
2.2.2 Tool(工具類(lèi))主要存放一些常用的類(lèi),此處Logger用于存放日志的封裝幫助類(lèi),Reachability用于存放判斷網(wǎng)絡(luò)狀態(tài)的幫助類(lèi);
2.2.3 Network(網(wǎng)絡(luò))這邊主要用到Y(jié)TKNetwork 是猿題庫(kù) iOS 研發(fā)團(tuán)隊(duì)基于 AFNetworking 封裝的 iOS 網(wǎng)絡(luò)庫(kù),這邊是對(duì)它進(jìn)行一些修改,為了滿(mǎn)足不同Tag及不同的功能模塊可能訪(fǎng)問(wèn)不同URL的要求;
2.2.4 Category(分類(lèi))主要用到Git上面iOS-Categories分類(lèi)的內(nèi)容,多創(chuàng)建一個(gè)Other用于存放平時(shí)要擴(kuò)展的分類(lèi);
2.3 Resource(資源)模塊的內(nèi)容
資源模塊主要包含三方面,Global( 全局 )、Image( 圖片 )、Plist( 配置文件 );
2.3.1 Global用于存放項(xiàng)目一些全局的內(nèi)容,包含啟動(dòng)項(xiàng)的內(nèi)容LaunchScreen.storyboard、頭部引用PrefixHeader.pch、語(yǔ)言包File.strings
2.3.2 Image用于存放圖片資源,可以根據(jù)功能模塊進(jìn)行再分不同的xcassets文件;
2.3.3 Plist用于存放plist文件,主要是本項(xiàng)目中會(huì)創(chuàng)建多個(gè)的Tag,而每個(gè)Tag都會(huì)有自個(gè)的plist文件進(jìn)行管理,所以統(tǒng)一存放方便管理;
2.4 Vender(第三方)模塊的內(nèi)容
雖然項(xiàng)目中已經(jīng)用Pod來(lái)管理第三方插件,但對(duì)于一些可能要進(jìn)行修改的第三方可以存放在這邊,本實(shí)例中引用的幾個(gè)比較常用的第三方插件,簡(jiǎn)單介紹其中的幾個(gè),GVUserDefaults是對(duì)UserDefaults的封裝,簡(jiǎn)單就可以用于存取操作;JDStatusBarNotification是在狀態(tài)欄提示效果的插件;ActionSheetPicker底部彈出如時(shí)間選擇、選項(xiàng)的插件;QBImagePickerController是照片選擇插件,支持多選并可以設(shè)置最多選擇張數(shù);
上一篇我們說(shuō)到組件化開(kāi)發(fā)是一個(gè)App最大一層的架構(gòu),那具體到了一個(gè)一個(gè)的業(yè)務(wù)組件里,比組件化開(kāi)發(fā)小一點(diǎn)的架構(gòu)就是三層架構(gòu)。所謂三層架構(gòu)就是指把項(xiàng)目中所有的類(lèi)劃分到不同的層,目的是使項(xiàng)目邏輯更加清晰,提升開(kāi)發(fā)和維護(hù)的效率,我們一般會(huì)把項(xiàng)目分為三層:數(shù)據(jù)層、業(yè)務(wù)層、視圖層。
注意:嚴(yán)格來(lái)講,三層架構(gòu)并不真正就比組件化開(kāi)發(fā)小,它們倆只是從不同的角度去做架構(gòu)而已,往往是相互融合的,比如組件化開(kāi)發(fā)里網(wǎng)絡(luò)庫(kù)就是三層架構(gòu)里數(shù)據(jù)層的內(nèi)容,UI庫(kù)就是三層架構(gòu)里視圖層里的內(nèi)容等,這里之所以說(shuō)“三層架構(gòu)是比組件化開(kāi)發(fā)小一點(diǎn)的架構(gòu),主要是針對(duì)業(yè)務(wù)組件來(lái)說(shuō)的”,當(dāng)然甚至我們?cè)诓皇褂媒M件化開(kāi)發(fā)時(shí)項(xiàng)目里依然可以使用三層架構(gòu)。
比三層架構(gòu)再小一點(diǎn)的架構(gòu)就是視圖層架構(gòu),我們常說(shuō)的MVC、MVVM都是?視圖層的架構(gòu)。
MVC,即Model-View-Controller,它們的關(guān)系如下:
MVVM,即Model-View-ViewModel,它們的關(guān)系如下:
新聞名稱(chēng):ios開(kāi)發(fā)架構(gòu),ios開(kāi)發(fā)架構(gòu)Linux
當(dāng)前鏈接:http://chinadenli.net/article34/dsdgdpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、域名注冊(cè)、Google、自適應(yīng)網(wǎng)站、靜態(tài)網(wǎng)站、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)