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 网络请求数据与解析相关推荐
- 『Android』网络请求数据与JSON解析
『Android』网络请求数据与JSON解析
- Alamofire网络库基础教程:使用 Alamofire 轻松实现 Swift 网络请求
Alamofire网络库基础教程:使用 Alamofire 轻松实现 Swift 网络请求 转自 http://www.cocoachina.com/ios/20141202/10390.html 本 ...
- java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程
本发明涉及网络通讯领域,特别涉及一种基于Java语言的网络通讯数据包解析方法. 背景技术: 计算机系统和网络的大量普及使用使全球跨入了信息化时代.但是,正由于现代社会中几乎一切都在"计算机化 ...
- 网络请求数据demo
主类 package com.bwie.yuekaoa; import android.os.AsyncTask; import android.support.v7.app.AppCompatAct ...
- 二、Swift网络请求回来的数据我这样取
网络请求框架Alamofire 源码地址 Swift 2.3 Alamofire3.0版本支持 iOS 8 Swift 3 Alamofire4.0以上版本支持 iOS 9及以上系统 json数据: ...
- Swift 网络请求库Moya的使用
Moya是Swift中的网络库Alamofire的二次封装,Alamofire本身使用起来是很简单方便的,例子如下: func loadData(){var param = [String:Strin ...
- 使用 Siesta 处理 Swift 网络请求
(原文地址:https://medium.freecodecamp.o...) 今天我跟大家分享一下我的 iOS 网络库新欢,名字叫做 Siesta."她有啥特殊的?为啥我不直接用 Almo ...
- [译]使用 Siesta 处理 Swift 网络请求
(原文地址:https://medium.freecodecamp.org/swift-networking-with-siesta-5b5e7089bd8f) 今天我跟大家分享一下我的 iOS 网络 ...
- Fragment标签页+OKHttp网络请求数据+MVP模式
分包方式 需要的第三方依赖 Fragment 新建两个fragment MainActivity 主页面布局 设置Fragment+tablayout的适配器 Fragment标签页结束 OKHttp ...
最新文章
- 三层神经网络前向后向传播示意图
- NTT 高级科学家:光子是深度学习的未来!
- gwt的mvp模式_GWT MVP变得简单
- 代理的JavaOne 2014观察
- Linux查看文件内容命令:cat, tail, head, more, less
- android 语音搜索动画,Android自定义控件实现UC浏览器语音搜索效果
- BIO、伪异步 IO、AIO和NIO
- PGM:贝叶斯网的参数估计
- decodeURI decodeURIComponent
- dirent struct_file属性读取 Struct dirent struct stat
- Crosses and Crosses POJ - 3537 (博弈)
- day03-文字效果标签及特殊符号
- Markdown使用指南
- JS三座大山之原型链
- python中assert是什么意思_你常常看到 Python 代码中的 assert 是个啥?
- 数字签名开源_数字时代的开源与人文
- 修复Linux下NVidia显卡画面撕裂的问题
- 三星910S3L单m2接口更换硬盘系统克隆全程攻略
- ffmpeg库 pycharm_python+ffmpeg让字符跳动起来
- 人工智能、机器学习和认知计算入门指南