我需要在执行函数之前等待response.response?.allHeaderFields数据。我搜索过网络并没有完全了解如何在alamofire请求中添加“完成处理程序”。或者,如果有任何其他方法使功能等待。
@IBAction func comfirmation(sender: UIButton) {
if CodeTextField.text != "" {
print("in comfirmation function")
let comfirmationRequestData = [
"phone" : "\(appDelegate.savedNumber)",
"code" : "\(CodeTextField.text!)"
]
Alamofire.request(.POST,
"http://192.168.214.241:4000/login",
parameters: comfirmationRequestData,
encoding: .JSON).responseJSON {
response in
switch response.result {
case .Success:
let jsonDecrypted = JSON(response.result.value!)
print(jsonDecrypted)
let headerFile = response.response?.allHeaderFields as? [String:String]
print(headerFile)
case .Failure(let error):
print(error)
}
}
print("in comfirmation function. success")
appDelegate.defaults.setValue(appDelegate.savedNumber, forKey: "phoneNumber")
} else {
print("in comfirmation function. failed")
}
}
答案 0 :(得分:5)
像这样使用Alamofire
func postRequest( urlSuffix : String, params:[String : AnyObject]?, filterParams : [String]?, success: (response: AnyObject!) -> Void, failure: (error: NSError?) -> Void)
{
Alamofire.request(.POST, webServicesURLPrefix + urlSuffix, parameters: params, encoding: .JSON, headers: self.headers)
request?.responseJSON { response in
switch response.result
{
case .Success:
success(response: response.result.value)
case .Failure(let error):
failure(error: error)
}
}
}
从任何地方调用该方法
self.postRequest("do-registration.php", params: params, filterParams: nil, success: { (response) -> Void in
self.afterResponse(response)
}) { (error) -> Void in
failure(error: error)
}
或者你可以写一个完美的方法,你必须在完成后调用。
func afterResponse(responseData : AnyObject)
{
print("Done")
print(responseData)
}
答案 1 :(得分:1)
您可以使操作同步,但为了做到这一点,您将不得不使用您在Alamofire请求之前设置的信号量,然后在完成处理程序中释放。在您启动Alamo火灾后,您将立即等待信号量。
答案 2 :(得分:0)
有一个使用信号量工作的库Alamofire-Synchronous。
样品:
//json
let response = Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]).responseJSON()
if let json = response.result.value {
print(json)
}