請(qǐng)求推薦數(shù)據(jù)
請(qǐng)求方式: AFNetworking&Alamofire?
目前在iOS開(kāi)發(fā)中, 請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù), 我們經(jīng)常會(huì)使用第三方框架. 而比較出名的莫過(guò)于A(yíng)FNetworking
不過(guò)AFNetworking是使用OC開(kāi)發(fā)的框架,作者又專(zhuān)門(mén)針對(duì)Swift開(kāi)發(fā)了另外一個(gè)框架就是:Alamofire。
因?yàn)槲覀冊(cè)擁?xiàng)目是Swift版本,所有直接采用Alamofire
注:其實(shí)Alamofire非常強(qiáng)大,不過(guò)我們這里只是發(fā)送請(qǐng)求,使用起來(lái)是非常方便的。
集成Alamofire
在iOS開(kāi)發(fā)中,如果我們集成一個(gè)第三方框架,通常會(huì)使用Cocoapods
因此,我們這里通過(guò)Cocoapods進(jìn)行集成
找到項(xiàng)目所在目錄:
打開(kāi)終端:
進(jìn)入項(xiàng)目目錄,執(zhí)行:
pod init
操作之后會(huì)生成Profile文件,打開(kāi)Profile文件(記事本、Xcode打開(kāi)即可,推薦Xcode打開(kāi))
將下面代碼粘貼過(guò)去
回到終端,執(zhí)行
pod install --no-repo-update
命令關(guān)閉程序,通過(guò)
工作空間
打開(kāi)項(xiàng)目
工具類(lèi)的封裝
在實(shí)際開(kāi)發(fā)中,為了不過(guò)于依賴(lài)某一個(gè)第三方框架,我們經(jīng)常會(huì)在使用的方式封裝到某一個(gè)工具類(lèi)中,以便于某天該框架不更新時(shí)不至于很多地方都需要修改。
比如之前的ASIHTTPRequest就出現(xiàn)了不更新的情況
因此,我們?cè)谑褂弥跋确庋b一個(gè)簡(jiǎn)單的工具類(lèi)。之后在其它任何地方發(fā)送網(wǎng)絡(luò)請(qǐng)求,都依賴(lài)于自己的工具類(lèi)。如果某一天該框架不再更新,我們希望更換框架,只修改工具類(lèi)中代碼即可。
創(chuàng)建工具類(lèi):NetworkTools
為工具類(lèi)提供類(lèi)方法,方便調(diào)用
請(qǐng)求時(shí),需要傳入請(qǐng)求方式、地址(URL)、參數(shù)(parameters)、回調(diào)閉包
在請(qǐng)求方法中,使用Alamofire發(fā)送網(wǎng)絡(luò)請(qǐng)求
MVVM介紹
前面環(huán)境配置完成后,我們要請(qǐng)求首頁(yè)數(shù)據(jù)。
數(shù)據(jù)請(qǐng)求在哪里發(fā)送了?
MVC模式
Model-View-Controller是一個(gè)Apple官方推薦的權(quán)威范式。
蘋(píng)果使用的MVC的定義是這么說(shuō)的:所有的對(duì)象都可以被歸類(lèi)為一個(gè)model,一個(gè)view,或是一個(gè)controller。
那么把網(wǎng)絡(luò)代碼放哪里?
我們知道,因?yàn)榭刂破魇且粋€(gè)大管家,那么不知道如何安放的代碼就放置在控制器中
是的,傳統(tǒng)的MVC方式我們經(jīng)常這么做。
該做法的弊端在哪里?
由于大量的代碼被放進(jìn)view controller,導(dǎo)致控制器變的相當(dāng)臃腫。
在iOS開(kāi)發(fā)中有的view controller里綿延成千上萬(wàn)行代碼的事并不是前所未見(jiàn)的
厚重的View Controller很難維護(hù)(由于其龐大的規(guī)模);包含幾十個(gè)屬性,使他們的狀態(tài)難以管理;遵循許多協(xié)議(protocol),導(dǎo)致協(xié)議的響應(yīng)代碼和controller的邏輯代碼混淆在一起。
那么究竟應(yīng)該放在哪里?
顯然MVC的3大組件根本沒(méi)有適合放這些代碼的地方。
MVVM模式
MVVM來(lái)自微軟。和MVC很像,并且引入新的組件ViewModel
view model是一個(gè)放置用戶(hù)輸入驗(yàn)證邏輯,視圖顯示邏輯,發(fā)起網(wǎng)絡(luò)請(qǐng)求和其他各種各樣的代碼的極好的地方。
由于展示邏輯放在了view model中(比如網(wǎng)絡(luò)請(qǐng)求、請(qǐng)求后的數(shù)據(jù)解析等等),視圖控制器本身就會(huì)不再臃腫。
因此,該項(xiàng)目中的請(qǐng)求數(shù)據(jù),統(tǒng)一交給ViewModel管理。每一個(gè)控制器對(duì)應(yīng)一個(gè)屬于自己的ViewModel。
發(fā)送網(wǎng)絡(luò)請(qǐng)求
接口解析
在推薦的數(shù)據(jù)展示中,有三個(gè)請(qǐng)求
最熱數(shù)據(jù)請(qǐng)求
顏值數(shù)據(jù)請(qǐng)求
其它數(shù)據(jù)請(qǐng)求
因此我們需要分別發(fā)送三個(gè)請(qǐng)求,并且當(dāng)所有的請(qǐng)求數(shù)據(jù)拿到之后,對(duì)數(shù)據(jù)進(jìn)行整理分組排序。(因?yàn)榻缑嬷杏杏玫椒纸M)
因此請(qǐng)求分成五步曲
請(qǐng)求游戲數(shù)據(jù),并且轉(zhuǎn)成模型對(duì)象
請(qǐng)求顏值數(shù)據(jù),并且轉(zhuǎn)成模型對(duì)象
請(qǐng)求熱門(mén)數(shù)據(jù),并且轉(zhuǎn)成模型對(duì)象
對(duì)數(shù)據(jù)進(jìn)行整理,并且放入大的數(shù)組中
將數(shù)據(jù)傳遞給外面控制器,展示數(shù)據(jù)
接口描述
接口名稱(chēng):熱門(mén)數(shù)據(jù)(后面熱門(mén)游戲)
接口地址:http://capi.douyucdn.cn/api/v1/getHotCate
請(qǐng)求參數(shù):
參數(shù)名稱(chēng) | 參數(shù)說(shuō)明 |
---|---|
time | 獲取當(dāng)前時(shí)間的字符串 |
limit | 獲取數(shù)據(jù)的個(gè)數(shù) |
offset | 偏移的數(shù)據(jù)量 |
接口名稱(chēng):顏值數(shù)據(jù)(第二組顏值數(shù)據(jù))
接口地址:http://capi.douyucdn.cn/api/v1/getVerticalRoom
請(qǐng)求參數(shù):
參數(shù)名稱(chēng) | 參數(shù)說(shuō)明 |
---|---|
time | 獲取當(dāng)前時(shí)間的字符串 |
limit | 獲取數(shù)據(jù)的個(gè)數(shù) |
offset | 偏移的數(shù)據(jù)量 |
接口名稱(chēng):大數(shù)據(jù)數(shù)據(jù)(第一組熱門(mén)數(shù)據(jù))
接口地址:http://capi.douyucdn.cn/api/v1/getbigDataRoom
請(qǐng)求參數(shù):
參數(shù)名稱(chēng) | 參數(shù)說(shuō)明 |
---|---|
time | 獲取當(dāng)前時(shí)間的字符串 |
展示數(shù)據(jù)
普通數(shù)據(jù)展示(文本數(shù)據(jù))
將數(shù)據(jù)回調(diào)給控制器后,控制器拿到數(shù)據(jù)展示數(shù)據(jù)即可
將Cell中的控件拖入屬性
定義模型對(duì)象
在控制器中拿到模型,并且將模型傳入給Cell進(jìn)行展示
圖片數(shù)據(jù)展示
在設(shè)置網(wǎng)絡(luò)圖片時(shí),OC中經(jīng)常使用SDWebImage框架。
相同的原因,我們使用的Swift項(xiàng)目,因此這里我使用
onevcat
, 也就是喵神
寫(xiě)的Kingfisher
在Profile中加入框架, 并且執(zhí)行安裝命令
pod install —no-repo-update
使用代碼
更多資訊歡迎登陸520it.com。小碼哥社區(qū),編程愛(ài)好者的家園。
(正文已結(jié)束)
推薦閱讀:智慧網(wǎng)
免責(zé)聲明及提醒:此文內(nèi)容為本網(wǎng)所轉(zhuǎn)載企業(yè)宣傳資訊,該相關(guān)信息僅為宣傳及傳遞更多信息之目的,不代表本網(wǎng)站觀(guān)點(diǎn),文章真實(shí)性請(qǐng)瀏覽者慎重核實(shí)!任何投資加盟均有風(fēng)險(xiǎn),提醒廣大民眾投資需謹(jǐn)慎!