读 Alamofire源码 swift

1,675 阅读1分钟

1

Alamofre是对URLSession的封装,所以我们先看下Apple原生 的URLSession网络请求是怎样的

1. swift 原生的网络请求

 let session = URLSession(configuration: configuration, delegate: delegate, delegateQueue: delegateQueue)
 let url = URL(string: "http://--")!;    
 let task =  session.dataTask(with: url) { data, response, error in           
     print(data ,response,error)     
 }
task.resume()

2.1 Alamofire  response Model 直接解析

特性1  Decodeable Responses Alamofire 可以在reponse里直接解析成Model 。

/// 定义个遵守Codable的模型
struct Item: Codable {
    var topicOrder: Int?
    var id: Int?
    var topicDesc: String?
    var topicTittle: String?
    var upTime: String?
    var topicImageUrl: String?
    var topicStatus: Int?
}
AF.request(baseURL,
           method: .post)
           .responseDecodable { (response: AFDataResponse<Item>) in
               switch response.result {
               case .success(let model):
                   break
               case .failure(let error):
                   break
               }
           }

2.2 Alamofire Model 参数请求

特性2 Encodable Parameters

例子

/// 定义一个传参模型
struct VinEntity: Codable {
    var vin: String
}

/// 创建一个传参实例
let vin = VinEntity(vin: "season")

/// Alamofire中请求中传递这个实例即可
AF.request(baseURL,
           method: .post,
           parameters: vin, encoder: JSONParameterEncoder.default)
    .responseDecodable { (response: AFDataResponse<Token>) in
        switch response.result {
        case .success(let model):
            break
        case .failure(let error):
            break
        }
    }

部分类图