关于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去处理。
DetailViewController.swift中接受request的申明,并在viewDiaAppear中调用自定义refresh方法处理网络返回的结果
========上面是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乐园
网友评论