swift 4 Alamofire与SwiftJSON框架的使用

作者: 牵手生活 | 来源:发表于2017-09-21 15:14 被阅读2622次

关于Alamofire及SwiftJson库引用参见我的“iOS引入第3方库详细步骤--Alamofire4.x及SwiftJson

这2个框架源码都在github上

Alamofire github地址:https://github.com/Alamofire/Alamofire/

SwiftyJSON github地址:https://github.com/SwiftyJSON/SwiftyJSON

Alamofire 源码介绍(Example是如何使用的例子)


Alamofire源码、功能介绍

Alamofire github源码

Alamofire.swift:定义了很多全局的function(上传、下载、get、put、delete等)

AFError.swift:错误处理

SeeionManager.swift、SeeionDelegate.swift:管理我们与服务器之间通信的所以session

MultipartFromData.swfit:上传数据的一个表单

NetworkReachablityManager.swift:网络状态的判断(当前网络是否可用、wifi等等)

Notificaitons.swift:处理一些通知

ParameterEncoding.swift:发起请求传递参数时,这些参数是放在body或Url

Request.swift:请求

Response.swift:相应,处理服务区返回数据(二进制流的NSData)进行系列化成string、image火声音

Result.swfit:服务区返回的成功Success(value)、失败Failure(Error)等数据

ResponsedSerialization.swift:证书管理

TimeLine.swift:提供一些debug的操作,如请求了多长时间、初始化用了多长时间、系列化结果用了多长时间等等

Upload.swift:处理文件上传的内容

Validation.swift:我们拿到服务器处理结果,可以先处理一些验证


Alamofire官网demo介绍

Alamofire 例子是在MasterViewController.swift中调用,通过seque传递给DetailViewController.swift去处理。


call demo

DetailViewController.swift中接受request的申明,并在viewDiaAppear中调用自定义refresh方法处理网络返回的结果


detail receive var  demo detail handle http result

========上面是Alamofire功能及官网demo介绍=====


自己再写一个简单的例子并打印各个结果

导入

如需要使用Alamofire和SwiftyJSON,就在相应的类前添加

···

import Alamofire

import SwiftyJSON

···

普通demo示例

func requiredDemo() -> Void {

let user = "user"

let password = "password"

Alamofire.request("https://httpbin.org/basic-auth/\(user)/\(password)")

.authenticate(user: user, password: password)

.responseJSON { response in

debugPrint(response)

}

}


更多响应情况打印示例

func requestGet() -> Void {

//        Json数据采用豆瓣的apid获取

//        https://api.douban.com/v2/book/12220562

//        let parameters = ["id": 1000]

//        let urlString = "https://api.douban.com/v2/book/12220562"

let urlString = "https://zhiguicai112.000webhostapp.com/LoginRegister/FetchUserData_demo.php"

/* //AlamofirePost情况打印示例=====get 请求及JSON数据解析 */

Alamofire.request(urlString, method: .get

//            , parameters: parameters

, encoding: JSONEncoding.default)

.downloadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in

print("进度: \(progress.fractionCompleted)/n")

}

.validate { request, response, data in

// 自定义的校验闭包, 现在加上了 `data` 参数(允许你提前转换数据以便在必要时挖掘到错误信息)

return .success

}

.responseJSON { response in

print("=====分割线---开始打印response数据=======/n")

debugPrint(response)

print("=====分割线---开始打印Request 原始请求数据=======/n")

print("Request: \(String(describing: response.request))")  // original url request

print("=====分割线---开始打印url 相应数据=======/n")

print("Response: \(String(describing: response.response))") // http url response

print("Result: \(response.result)")

self.parseJSONByGeneral(response.result.value)  //才用普通方式解析

self.parseJSONBySwiftJson(response.result.value) //才用SwiftJson解析

// response serialization result

if let json = response.result.value{

print("=====分割线---开始打印json数据==如果你要对返回的json数据处理可以在此添加=====/n")

print(json)  // serialized json response

}

if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {

print("=====分割线---按UTF8打印数据=======/n")

print("Data: \(utf8Text)") // original server data as UTF8 string

}

}

}


http返回数据解析

//    返回结构:

//    {

//    age = 39;

//    name = "\U7275\U624b\U751f\U6d3b";

//    password = password;

//    username = caizhigui;

//    }

普通的方式解析json

func parseJSONByGeneral(_ jsonValue: Any?) -> Void{

if let v = jsonValue{

if let dic = v as? [String:AnyObject]{

let age = dic["age"]  as! String

let name = dic["name"] as! String

let password = dic["password"]  as! String

let username = dic["username"]  as! String

debugPrint("=========打印 普通json解析出来的内容=======")

debugPrint("年龄:\(age) 名字:\(name) 密码:\(password) 用户名:\(username) ")

}

}

}


SwiftJSON方式解析json

func parseJSONBySwiftJson(_ jsonValue: Any?) -> Void{

let json = JSON(jsonValue!)

debugPrint("=========打印 SwiftJson json解析出来的内容=======")

//        debugPrint("年龄:\(json["result"]["age"].stringValue)")  //多层解析的方式

debugPrint("年龄:\(json["age"].stringValue)")

debugPrint("名字:\(json["name"].stringValue)")

debugPrint("密码:\(json["password"].stringValue)")

debugPrint("用户名:\(json["username"])")

}


分享是一种美德,牵手是一种生活方式。

最后感谢简书提供的分享平台,你觉得有用可以收藏方便以后查阅。

个人分享内容分类

今日头条号--牵手生活 :android 破解与逆向(暂未接触ios逆向)

csdn--牵手生活 :android 入门级介绍、部分工具类分享。

简书--牵手生活 :侧重打造-ios乐园

相关文章

网友评论

    本文标题:swift 4 Alamofire与SwiftJSON框架的使用

    本文链接:https://www.haomeiwen.com/subject/tpbzsxtx.html