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