如何从方法返回alamofire Http请求的结果?
问题描述:
我正在使用alamofire和swift 3.我想返回从Http请求中获得的数据。目前即时通讯使用完成处理程序。如何从方法返回alamofire Http请求的结果?
func SendHttpRequest(params: AnyObject, header_obj: [String: String], url:String, http_method:HTTPMethod, completion: @escaping (_ response_value: JSON, _ error_type: String)->()) {
Alamofire.request(BASE_URL + url, method: http_method, parameters: (params as! [String : Any]) , encoding: URLEncoding.default, headers: header_obj).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if let jsonValue = response.result.value {
let json = JSON(jsonValue)
completion(json, "")
}
break
case .failure(_):
print(response.result.error!)
completion(JSON(response.result.value!), "NO_INT")
//"The Internet connection appears to be offline."
break
}
}//Alamofire
}//SendHttpRequest
但我想要的是返回无论我通过Http请求获得的结果。 例如: -
func GetUsers() -> [Users]{
//HERE IT SHOULD EXCUTE THE HTTP REQUEST AND RETURN THE USERS LIST
}
我该如何实现它?我可以通过参数理论实现它吗?
答
我并不确定你的json是如何构建的,或者你的User结构/类是怎么样的,但是你应该这样做。如果我正确理解你想做的事情。
class NetworkingStuff {
func SendHttpRequest(params: AnyObject, header_obj: [String: String], url:String, http_method:HTTPMethod, success: @escaping (Any) ->(), failure: @escaping (error?) ->()) {
Alamofire.request(BASE_URL + url, method: http_method, parameters: (params as! [String : Any]) , encoding: URLEncoding.default, headers: header_obj).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if let jsonValue = response.result.value {
let json = JSON(jsonValue)
success(json, "")
}
break
case .failure(_):
print(response.result.error!)
failure(JSON(response.result.value!), "NO_INT")
//"The Internet connection appears to be offline."
break
}
}
}
}
处理数据:
func GetUsers() -> [Users]? {
networkingStuff.sendHttpRequest(params: something, header_obj: dict, url: URL, http_method: Alamofire.post, success: { (responseData: Any) ->() in
if let data = responseData as? [String: Any], let users = data["users"] as? [String: Any] {
if let userArray = Users(dict: users) {
return userArray
} else {
return nil
}
}
}, failure: { (error: Any?) ->() in
return nil
})
}