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(简书翻译)

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值