Swift 网络请求数据与解析

时间:2022-01-05 00:02:18

一: 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 。

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'

如果导入有问题,好好上网去找一下问题所在的地方,你不断地坚持尝试和探索的过程本来就是一个在学习的过程,建议你一定要搞清楚要知道你做的每一步是什么意义,你修改尝试的每个地方代表着什么意思!尽量别做一个我知道那样可以,但我不知道为什么的孩纸哈!!还是给整个文件代码给大家看,完成清晰点!

二:完整代码示例用法

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.
}
*/ }

模拟机上的运行效果:

Swift 网络请求数据与解析

三:进一步学习

上面说的这些,可以看到我数据我们是拿到了,也解析了使用了!就是这几个三方最简单的使用了!下面再给大家一下链接,大家有空好好学习一下上面这几个库!!

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 网络请求数据与解析的更多相关文章

  1. [Swift通天遁地]四、网络和线程-(5)解析网络请求数据:String(字符串)、Data(二进制数据)和JSON数据

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  3. 使用Charles进行网络请求抓包解析

    使用Charles进行网络请求抓包解析 0. 懒人的福音(⌐■_■)(破解版下载地址,记得安装java库支持) http://pan.baidu.com/s/1c08ksMW 1. 查看电脑的ip地址 ...

  4. IOS SWIFT 网络请求JSON解析 基础一

    前言:移动互联网时代,网络通信已经是手机端必不可少的功能.应用中也必不可少地使用了网络通信,增强客户端与服务器交互.使用NSURLConnection实现HTTP的通信.NSURLConnection ...

  5. swift Alamofire请求数据与SwiftJson解析

    一直在研究swift 程序最重要的是什么???答案当然是数据啦.  数据对一个程序的影响有多大自己想去吧!!!如果你非要说不重要,那你现在就可以关网页了  哈哈哈哈哈 我呢  swift新手  菜鸟一 ...

  6. 基于AFNetWorking 3.0封装网络请求数据的类

    对于使用 AFNetworking 的朋友来说,很多朋友都是直接调用 AFNetworking的 API ,这样不太好,无法做到全工程统一配置. 最好的方式就是对网络层再封装一层,全工程不允许直接使用 ...

  7. C#网络请求与JSON解析

    最新学校的海康摄像头集控平台(网页端)不能在win10里登录,我寻思着拿海康的c# demo直接改. 首先得解决权限问题,每个教师任教不同年级,只能看到自己所在年级的设备,涉及到登录,在此记录一下C# ...

  8. iOS 自己封装的网络请求,json解析的类

    基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求 ...

  9. 【spring源码学习】springMVC之映射,拦截器解析,请求数据注入解析,DispatcherServlet执行过程

    [一]springMVC之url和bean映射原理和源码解析 映射基本过程 (1)springMVC配置映射,需要在xml配置文件中配置<mvc:annotation-driven >  ...

随机推荐

  1. mybatis insert前获取要插入的值

    <insert id="insertRequestItem" parameterType="requestItemModel"> <selec ...

  2. jquery导航动画

    经常在网上看到的,鼠标在导航上移动时,导航底部的横条会自动移动到鼠标悬浮的导航项上. 效果如下图: 利用jquery的 animate 函数,很好实现.代码很简单! 代码如下: <!DOCTYP ...

  3. java小程序

    1.水仙花数 这个数等于它的每位数的立方和 (三位数) 示例一: int i; int j; int k; for (i=1;i<=9;i++) { for (j=0;j<=9;j++){ ...

  4. The file &OpenCurlyDoubleQuote;XXX” couldn’t be opened because you don’t have permission to view it&period;解决方法&colon;

    The file “XXX” couldn’t be opened because you don’t have permission to view it.解决方法:   解决方法:直接点击Xcod ...

  5. 了解Java

    一.计算机程序      为了让计算机执行某些操作或解决某个问题而编写一系列有序指令的集合.二.Java  SE(标准版)      1.Java技术的基础和核心:      2.主要由于开发桌面应用 ...

  6. 2017-2018-1 20155215 第九周 加分项 PWD命令的实现

    1 学习pwd命令 Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pw ...

  7. Ionic3关闭弹出页面,跳转到列表后刷新父页面

    记得上次写过一篇如何弹出页面的文章,好像是2月28号ionic3 Modal组件那一篇,这篇也算那一篇的续集吧!这篇是弹出的页面关闭后刷新父页面的干活!上代码! 弹出页面:(关闭的时候可以传入值,再父 ...

  8. JavaScript常用数组操作方法,包含ES6方法

    一.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2,3]; var arr2 = [4,5]; ...

  9. 视频编码---mjpeg

    http://www.eepw.com.cn/article/201612/333063.htm https://www.cnblogs.com/ikaka/p/4860858.html https: ...

  10. 述 SQL 中的 distinct 和 row&lowbar;number&lpar;&rpar; over&lpar;&rpar; 的区别及用法

    1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...