Swift 网络请求数据与解析
一: Swift 網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求與處理最常用第三方?
? ??又有時(shí)間出來(lái)裝天才了,還是在學(xué)swift,從中又發(fā)現(xiàn)一些問(wèn)題,這兩天上網(wǎng)找博客看問(wèn)題弄的真的心都累。博客一篇寫(xiě)出來(lái),好多就直接照抄,就沒(méi)有實(shí)質(zhì)性的把問(wèn)題解決了,只是在發(fā)表的博客數(shù)量上 + 1 !!真心沒(méi)意思。。
? ? 看看在Swift中是在怎樣請(qǐng)求數(shù)據(jù),解析數(shù)據(jù)加載圖片這些的,也使我們最基本最常見(jiàn)的用法了,先說(shuō)說(shuō)這幾個(gè)三方庫(kù):?
? ? 第一個(gè):?Alamofire??(它的原作者就是AFNetworking的原作者,這個(gè)就不多說(shuō)了,你要知道AFNetworking有多重要,多好用,它就有多重要好用!)
? ? Git地址:https://github.com/Alamofire/Alamofire
? ? 第二個(gè):?SwiftyJSON??一個(gè)解析JSON數(shù)據(jù)的三方庫(kù),使用swift寫(xiě)的,中間幫你省去swift的各種可選值的操作,很簡(jiǎn)便(推薦!)
? ? Git地址: ?https://github.com/SwiftyJSON/SwiftyJSON
? ? 第三個(gè):?Kingfisher?? (一個(gè)圖片加載的國(guó)產(chǎn)庫(kù)。重點(diǎn)是國(guó)產(chǎn)的的支持!)
? ? Git地址:https://github.com/onevcat/Kingfisher/releases
? ? 說(shuō)說(shuō)他們導(dǎo)入時(shí)候的問(wèn)題,其實(shí)三方我們用的時(shí)候,可能導(dǎo)入的時(shí)候會(huì)有問(wèn)題,能用的反倒不會(huì)說(shuō)不會(huì)用怎樣,導(dǎo)入時(shí)候的問(wèn)題各種各樣,五花八門的!比起那些手動(dòng)導(dǎo)入三方的我真的是你強(qiáng)烈建議推薦 ?Cocoapods ! 它的安裝使用在前面我的博客里面有些過(guò),是最新安裝的方法,我的也是不久前安裝的,有需要的可以去看一下:地址---> ?http://www.cnblogs.com/taoxu/p/4964395.html
? ?然后呢,再給大家一個(gè)建議,導(dǎo)入時(shí)候多去 Git 上面看看原作者的詳細(xì)的導(dǎo)入過(guò)程,以及可能會(huì)出現(xiàn)的一下問(wèn)題!在導(dǎo)入的過(guò)程中,一定要注意你自己工程的最低版本要求和三方庫(kù)的最高版本要求之間的差異,這個(gè)很容易忽略導(dǎo)致錯(cuò)誤!我把自己的 cocoapods 的終端輸入命令展示出來(lái),確保是沒(méi)問(wèn)題,可行的!我寫(xiě)的例子項(xiàng)目最低版本是 8.0 。
| 1 2 3 4 5 6 7 8 9 10 11 | platform :ios,?'9.0' use_frameworks! pod?'Alamofire',?'~> 3.3' platform :ios,?'9.0' use_frameworks! pod?'SwiftyJSON','~> 2.3.1' platform :ios,?'8.0' use_frameworks! pod?'Kingfisher',?'~> 2.4' |
? ? ??如果導(dǎo)入有問(wèn)題,好好上網(wǎng)去找一下問(wèn)題所在的地方,你不斷地堅(jiān)持嘗試和探索的過(guò)程本來(lái)就是一個(gè)在學(xué)習(xí)的過(guò)程,建議你一定要搞清楚要知道你做的每一步是什么意義,你修改嘗試的每個(gè)地方代表著什么意思!盡量別做一個(gè)我知道那樣可以,但我不知道為什么的孩紙哈!!還是給整個(gè)文件代碼給大家看,完成清晰點(diǎn)!
二:完整代碼示例用法
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | import?UIKit import?Alamofire import?SwiftyJSON import?Kingfisher // 相當(dāng)于數(shù)據(jù)模型model class?itemsModel:?NSObject?{ ????? ????var?cover_image_url?=?"" ????var?title??=?"" ????var?likecount?=?"" ????? } class?giftSaycontroller:?UIViewController,UITableViewDelegate,UITableViewDataSource?{ ????? ????@IBOutlet?weak?var?gifttableview:?UITableView! ???? ????// 數(shù)據(jù)源 ????var?dataArray?= [itemsModel]() ????override?func?viewDidLoad() { ????????super.viewDidLoad() ????????? ????????gifttableview.delegate?=?self ????????gifttableview.dataSource?=?self ????????? ????????self.DownLoadData() ????????? ????????// Do any additional setup after loading the view. ??? ????} ????? ????// MARK: 下載解析數(shù)據(jù) ????func?DownLoadData() ->?Void?{ ???????? ????????Alamofire.request(.GET,?"http://api.liwushuo.com/v2/channels/104/items?ad=2&gender=2&generation=2&limit=20&offset=0").responseJSON?{ ????????????(response)???in ????????????? ????????????// 有錯(cuò)誤就打印錯(cuò)誤,沒(méi)有就解析數(shù)據(jù) ????????????if?let?Error?=?response.result.error ????????????{ ???????????????print(Error) ????????????} ????????????else?if?let?jsonresult?=?response.result.value?{ ????????????????// 用 SwiftyJSON 解析數(shù)據(jù) ????????????????let?JSOnDictory?=?JSON(jsonresult?) ????????????????let?data?=??JSOnDictory["data"]["items"].array ????????????????for?dataDic?in??data! ????????????????{ ????????????????????? ????????????????????let?model?=??itemsModel() ????????????????????//? ?? 這個(gè)符號(hào),我怕有初學(xué)者忘記了的提醒一下,A ?? B? 這是一個(gè) NIL合并運(yùn)算符,它的作用是如果 A 不是NIL 就返回前面可選類型參數(shù) A 的確定值, 如果 A 是NIL 就返回后面 B 的值!A和B之間類型的注意點(diǎn)我就不說(shuō)了,忘記了去看書(shū),,哈哈哈 ????????????????????model.cover_image_url?=?dataDic["cover_image_url"].string????"" ????????????????????model.title?=??dataDic["title"].string????"" ????????????????????let??numString?=?String(format:"%d",dataDic["likes_count"].intValue????0) ????????????????????model.likecount?=?numString ????????????????????self.dataArray.append(model) ????????????????????? ????????????????} ????????????????? ????????????????self.gifttableview.reloadData() ????????????????//print(jsonresult) ????????????} ????????} ????} ????? ????func?tableView(tableView:?UITableView,?numberOfRowsInSection?section:?Int) ->?Int?{ ????????? ????????return?self.dataArray.count ????? ????} ????? ????func?tableView(tableView:?UITableView,?cellForRowAtIndexPath?indexPath:?NSIndexPath) ->?UITableViewCell?{ ????????? ????????let?cell:giftTabelViewcell?=?tableView?.dequeueReusableCellWithIdentifier("Gifsayidentifile")?as!?giftTabelViewcell ????????let?model?=?self.dataArray[indexPath.row] ????????cell.likeNumberLabel.text?=?model.likecount ????????? ????????// 這個(gè)就是用到 Kingfisher ????????cell.backGroundImage.kf_setImageWithURL(NSURL(string:?model.cover_image_url)!) ????????return?cell ????????? ????} ????? ????func?tableView(tableView:?UITableView,?didSelectRowAtIndexPath?indexPath:?NSIndexPath) { ????????? ????????print(indexPath.row) ????????? ????} ????? ????override?func?didReceiveMemoryWarning() { ????????super.didReceiveMemoryWarning() ????????// Dispose of any resources that can be recreated. ????} ????? ????/* ????// MARK: - Navigation ????// In a storyboard-based application, you will often want to do a little preparation before navigation ????override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { ????????// Get the new view controller using segue.destinationViewController. ????????// Pass the selected object to the new view controller. ????} ????*/ } |
? ?模擬機(jī)上的運(yùn)行效果:
?
三:進(jìn)一步學(xué)習(xí)
? ? ??上面說(shuō)的這些,可以看到我數(shù)據(jù)我們是拿到了,也解析了使用了!就是這幾個(gè)三方最簡(jiǎn)單的使用了!下面再給大家一下鏈接,大家有空好好學(xué)習(xí)一下上面這幾個(gè)庫(kù)!!
? ? Alamofire: 網(wǎng)上好多直接抄襲了簡(jiǎn)書(shū)上面翻譯的那篇文章,不夠明了,簡(jiǎn)潔!不好就是不好,說(shuō)我渣渣看不懂也好,反正就這么吊,不服憋著!哈哈哈哈哈。。給大家推薦這個(gè)極客學(xué)院的一個(gè)視頻:?http://www.jikexueyuan.com/course/2680.html ?講的很明了很簡(jiǎn)潔,恩,我就是喜歡!要會(huì)員什么的,邀請(qǐng)小伙伴有三十天,別和我說(shuō)你只有一個(gè)QQ號(hào)!!╭(╯^╰)╮?
? ?SwiftyJSON:http://www.oschina.net/translate/swiftyjson-how-to-handle-json-in-swift (這個(gè)網(wǎng)上真的很多,你可以自己找找)
? ?Kingfisher: http://www.jianshu.com/p/fa2624ac1959(簡(jiǎn)書(shū)翻譯)
總結(jié)
以上是生活随笔為你收集整理的Swift 网络请求数据与解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQL Server 2019 安装教程
- 下一篇: Swift3.0中如何完成不同View