Swift 网络请求数据与解析
一: Swift 網絡數據請求與處理最常用第三方?
? ??又有時間出來裝天才了,還是在學swift,從中又發現一些問題,這兩天上網找博客看問題弄的真的心都累。博客一篇寫出來,好多就直接照抄,就沒有實質性的把問題解決了,只是在發表的博客數量上 + 1 !!真心沒意思。。
? ? 看看在Swift中是在怎樣請求數據,解析數據加載圖片這些的,也使我們最基本最常見的用法了,先說說這幾個三方庫:?
? ? 第一個:?Alamofire??(它的原作者就是AFNetworking的原作者,這個就不多說了,你要知道AFNetworking有多重要,多好用,它就有多重要好用!)
? ? Git地址:https://github.com/Alamofire/Alamofire
? ? 第二個:?SwiftyJSON??一個解析JSON數據的三方庫,使用swift寫的,中間幫你省去swift的各種可選值的操作,很簡便(推薦!)
? ? Git地址: ?https://github.com/SwiftyJSON/SwiftyJSON
? ? 第三個:?Kingfisher?? (一個圖片加載的國產庫。重點是國產的的支持!)
? ? Git地址:https://github.com/onevcat/Kingfisher/releases
? ? 說說他們導入時候的問題,其實三方我們用的時候,可能導入的時候會有問題,能用的反倒不會說不會用怎樣,導入時候的問題各種各樣,五花八門的!比起那些手動導入三方的我真的是你強烈建議推薦 ?Cocoapods ! 它的安裝使用在前面我的博客里面有些過,是最新安裝的方法,我的也是不久前安裝的,有需要的可以去看一下:地址---> ?http://www.cnblogs.com/taoxu/p/4964395.html
? ?然后呢,再給大家一個建議,導入時候多去 Git 上面看看原作者的詳細的導入過程,以及可能會出現的一下問題!在導入的過程中,一定要注意你自己工程的最低版本要求和三方庫的最高版本要求之間的差異,這個很容易忽略導致錯誤!我把自己的 cocoapods 的終端輸入命令展示出來,確保是沒問題,可行的!我寫的例子項目最低版本是 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' |
? ? ??如果導入有問題,好好上網去找一下問題所在的地方,你不斷地堅持嘗試和探索的過程本來就是一個在學習的過程,建議你一定要搞清楚要知道你做的每一步是什么意義,你修改嘗試的每個地方代表著什么意思!盡量別做一個我知道那樣可以,但我不知道為什么的孩紙哈!!還是給整個文件代碼給大家看,完成清晰點!
二:完整代碼示例用法
| 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 // 相當于數據模型model class?itemsModel:?NSObject?{ ????? ????var?cover_image_url?=?"" ????var?title??=?"" ????var?likecount?=?"" ????? } class?giftSaycontroller:?UIViewController,UITableViewDelegate,UITableViewDataSource?{ ????? ????@IBOutlet?weak?var?gifttableview:?UITableView! ???? ????// 數據源 ????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: 下載解析數據 ????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 ????????????? ????????????// 有錯誤就打印錯誤,沒有就解析數據 ????????????if?let?Error?=?response.result.error ????????????{ ???????????????print(Error) ????????????} ????????????else?if?let?jsonresult?=?response.result.value?{ ????????????????// 用 SwiftyJSON 解析數據 ????????????????let?JSOnDictory?=?JSON(jsonresult?) ????????????????let?data?=??JSOnDictory["data"]["items"].array ????????????????for?dataDic?in??data! ????????????????{ ????????????????????? ????????????????????let?model?=??itemsModel() ????????????????????//? ?? 這個符號,我怕有初學者忘記了的提醒一下,A ?? B? 這是一個 NIL合并運算符,它的作用是如果 A 不是NIL 就返回前面可選類型參數 A 的確定值, 如果 A 是NIL 就返回后面 B 的值!A和B之間類型的注意點我就不說了,忘記了去看書,,哈哈哈 ????????????????????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 ????????? ????????// 這個就是用到 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. ????} ????*/ } |
? ?模擬機上的運行效果:
?
三:進一步學習
? ? ??上面說的這些,可以看到我數據我們是拿到了,也解析了使用了!就是這幾個三方最簡單的使用了!下面再給大家一下鏈接,大家有空好好學習一下上面這幾個庫!!
? ? Alamofire: 網上好多直接抄襲了簡書上面翻譯的那篇文章,不夠明了,簡潔!不好就是不好,說我渣渣看不懂也好,反正就這么吊,不服憋著!哈哈哈哈哈。。給大家推薦這個極客學院的一個視頻:?http://www.jikexueyuan.com/course/2680.html ?講的很明了很簡潔,恩,我就是喜歡!要會員什么的,邀請小伙伴有三十天,別和我說你只有一個QQ號!!╭(╯^╰)╮?
? ?SwiftyJSON:http://www.oschina.net/translate/swiftyjson-how-to-handle-json-in-swift (這個網上真的很多,你可以自己找找)
? ?Kingfisher: http://www.jianshu.com/p/fa2624ac1959(簡書翻譯)
總結
以上是生活随笔為你收集整理的Swift 网络请求数据与解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server 2019 安装教程
- 下一篇: java利用Future实现多线程执行与