我是Alamofire的新手,这对我来说有点混乱。 我怀疑Alamofire是否只在该请求被触发后才添加完成处理程序。 例如,以下是Alamofire Github的使用示例。
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
.responseJSON { response in
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
在.request(.GET...
方法中,请求本身将恢复,然后返回。在此之后,返回的请求然后调用.responseJSON(...
方法将完成调用添加回某个队列。启动回调块是不是太迟了,因为请求已经被解雇了?通常情况下,我们总是在完成设置之后才发出请求,不是吗?
然而,在查尔斯的监督下,我发现只有在.responseJSON
方法返回后才发出Alamofire请求。
所以,请告诉我,我是如何误解Alamofire的逻辑的。 谢谢!
答案 0 :(得分:0)
你这样试试怎么样?
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
.responseJSON { response in
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
let result = response.result
switch result {
case .Success(let data):
let json = JSON(data)
completed(JSONObject: json, error: nil)
break
case .Failure(let error):
completed(JSONObject: nil, error: error)
break
}
}
答案 1 :(得分:0)
在返回响应之前,完成处理程序没有用处。当响应返回时,Alamofire会自动调用处理程序。如果在响应返回后添加了处理程序,Alamofire会立即调用处理程序(这就是为什么你可以随时添加多个处理程序,它们都将被调用)。