Alamofire4.x开源代码分析(一)使用方法

前端之家收集整理的这篇文章主要介绍了Alamofire4.x开源代码分析(一)使用方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本着了解框架的实现思路和学习Swift的目的开启本系列的博客.本系列参考Alamofire官方文档和自己的一些理解,欢迎指正和指教.

配置要求

@H_404_4@
  • iOS 8.0+,macOS 10.10.0+,tvOS 9.0+ and watchOS 2.0+
  • Xcode 8.1+
  • Swift 3.0+
  • 简单使用

    Alamofire.request("https://httpbin.org/get").responseJSON { response in
                print("Request: \(String(describing: response.request))")   // // 原始的请求
    
                print("Response: \(String(describing: response.response))") // http 请求响应
                print("Result: \(response.result)")                         // 响应结果标识
                
                if let json = response.result.value {
                    print("JSON: \(json)") // JSON序列化的数据
                }
                
                if let data = response.data,let utf8Text = String(data: data,encoding: .utf8) {
                    print("Data: \(utf8Text)") // 经过UTF-8编码的数据
                }
            }

    不难看出alamofire用了链式编程的思想.

    响应数据类型

    请求返回五种response

    // Response Handler -直接返回URL session delegate的数据
             func response(
             queue: DispatchQueue?,completionHandler: @escaping (DefaultDataResponse) -> Void)
             -> Self
             
             // Response Data Handler - 序列化为Data
             func responseData(
             queue: DispatchQueue?,completionHandler: @escaping (DataResponse<Data>) -> Void)
             -> Self
             
             // Response String Handler - 序列化成String字符串
             func responseString(
             queue: DispatchQueue?,encoding: String.Encoding?,completionHandler: @escaping (DataResponse<String>) -> Void)
             -> Self
             
             // Response JSON Handler - 序列化成JSON
             func responseJSON(
             queue: DispatchQueue?,completionHandler: @escaping (DataResponse<Any>) -> Void)
             -> Self
             
             // Response PropertyList (plist) Handler - 序列化成plist
             func responsePropertyList(
             queue: DispatchQueue?,completionHandler: @escaping (DataResponse<Any>) -> Void))
             -> Self

    被序列化的数据可以用通过resonse中的result.value来获取数据

    //也可以同时使用,内部通过线程队列实现
            Alamofire.request("https://httpbin.org/get")
                .responseString { response in
                    print("Response String: \(response.result.value)")
                }
                .responseJSON { response in
                    print("Response JSON: \(response.result.value)")
            }

    Response是默认在主线程队列执行异步回调,

    (queue ?? DispatchQueue.main).async

    这里的队列也是可以自定义的,例如:

    let utilityQueue = DispatchQueue.global(qos: .utility)
    
    Alamofire.request("https://httpbin.org/get").responseJSON(queue: utilityQueue) { response in
        print("Executing response handler on utility queue")
    }

    响应验证

    validate可以在结果返回之前验证响应状态或类型是否正确,也可以使用默认方式验证.validate()

    Alamofire.request("https://httpbin.org/get")
        .validate(statusCode: 200..<300)
        .validate(contentType: ["application/json"])
        .responseData { response in
            switch response.result {
            case .success:
                print("Validation Successful")
            case .failure(let error):
                print(error)
            }
        }

    Response缓存

    Response缓存基于系统的URLCache,如果需要自定义参数在后面 Session Manager Configurations章节中会讲到

    系列目录

    @H_404_4@
  • @L_502_1@
  • Alamofire4.x开源代码分析(二)请求参数和编码
  • Alamofire4.x开源代码分析(三)下载数据(更新中)
  • 猜你在找的Swift相关文章