Alamofire从基础到进阶 小技巧(二)

Alamofire
Version:4.5.1
Swift Version: 4.0.3

Podfiles

# Uncomment the next line to define a global platform for your proje
platform :ios, '8.0'
target 'UseageAlamofire' do
  use_frameworks!
  pod 'Alamofire'
end

目录:
Alamofire从基础到进阶 基础请求与响应(一)
Alamofire从基础到进阶 小技巧(二)

链式响应处理

Alamofire的响应处理是链式的,因为当你request一个请求的时候,它返回的是一个DataRequest的,所以你可以使用点语法再次进行序列化操作,具体我们看一下代码:

let url = "http://httpbin.org/get"
Alamofire.request(url)
    .responseData(completionHandler:  { response in
        print("response.result.value data")
        print(response.result.value)
    })
    .responseJSON(completionHandler: { response in
        print("response.result.value json")
        print(response.result.value)
    })

当我们使用链式响应处理的两次序列化的时候,实际上Alamofire只请求了一次服务器,但是对请求的数据进行了两次序列化操作,所以我们可以得到两次次回调结果,神奇吧。

可自定义响应队列

Alamofire的响应处理默认是在主线程进行的序列化操作,它也提供了我们一个参数可以进行自定义队列操作,我们看一下代码:

let queue = DispatchQueue.global()
Alamofire.request(url).responseJSON(queue: queue, completionHandler: { response in
    print("response.result.value qos")
    print(response.result.value)
})

我们定义了DispatchQueue.global()就会改变Alamofire在主线程中进行的序列化,从而从我们的自定义线程中进行序列化操作。

自定义超时时间

我们在做应用的时候,当我们从服务器请求数据的时候避免不了的要让用户等待一段时间,Alamofire为我们提供了 30秒的超时时间,当然我们也可以进行手动更改:

let url2 = URL(string: "http://httpbin.org/gzip")
var urlReuquest = URLRequest(url: url2!)
urlReuquest.timeoutInterval = 1
Alamofire.request(urlReuquest).responseJSON(completionHandler: { response in
    print(response.result.value)
})

我们设置了超时时间为1秒,所以在1秒内,没有收到服务器的返回,Alamofire就会给我们提供Error code = -1001,就是超时的响应。

响应处理验证

我们收到服务器返回的数据时候,很多时候我们都没有提前做过校验就用JSON去进行解析,现在我们可以对拿回的数据先进性校验再做处理,具体可看代码:

Alamofire.request(url)
    .validate(statusCode: 300..<500)
    .validate(contentType: ["application/json"])
    .responseJSON(completionHandler: { response in
        print("response.result.value validate")
        print(response.result.value)
        print(response.result.error)
    })

Alamofire为我们默认的statusCode是200..<300当然,我们为了演示校验,所以就用了300..<500,这个时候Alamofire就返回给了我们一个nil。validate(contentType:)为我们校验服务器返回的是否是application/json的类型。

--以此来记录 Usage Alamofire ^ _^ --

你可能感兴趣的:(Alamofire从基础到进阶 小技巧(二))