使异步 alamofire 请求同步
making an asynchronous alamofire request synchronous
我正在尝试在 swift
中执行 alamofire post 请求
func checkIfUserExistsInDB(userName: String) -> NSString
{
print ("IN")
var info: NSString = ""
Alamofire.request(.POST, "http://blablabla.com/getuserdata", parameters: ["queryValue": userName,], encoding:.JSON).responseJSON { request, response, result in
switch result {
case .Success(let JSON):
info = NSString(data: JSON.dataUsingEncoding(NSUTF8StringEncoding)!, encoding: NSUTF8StringEncoding)!
case .Failure(let data, _):
print ("IN")
if let data = data {
info = (NSString(data: data, encoding: NSUTF8StringEncoding)!)
print (info)
}
}
}
return info
}
但我 运行 无法同步进行。我知道制作异步函数(如 Alamorfire 提供的函数)通常不被接受,但在我的情况下,我必须同步完成。
在 Swift 中实现完成块非常容易。
这是带有完成块的函数
func checkIfUserExistsInDB(userName: String, completion:(String) -> Void)
{
Alamofire.request(.POST, "http://blablabla.com/getuserdata", parameters: ["queryValue": userName,], encoding:.JSON).responseJSON { request, response, result in
switch result {
case .Success(let JSON):
let info = String(data: JSON.dataUsingEncoding(NSUTF8StringEncoding)!, encoding: NSUTF8StringEncoding)!
completion(info)
case .Failure(let data, _):
if let errorData = data, info = String(data: errorData, encoding: NSUTF8StringEncoding) {
completion(info)
}
}
}
}
并且可以调用(info
是异步返回的字符串)
checkIfUserExistsInDB("string") { (info) in
print(info)
}
我正在尝试在 swift
中执行 alamofire post 请求func checkIfUserExistsInDB(userName: String) -> NSString
{
print ("IN")
var info: NSString = ""
Alamofire.request(.POST, "http://blablabla.com/getuserdata", parameters: ["queryValue": userName,], encoding:.JSON).responseJSON { request, response, result in
switch result {
case .Success(let JSON):
info = NSString(data: JSON.dataUsingEncoding(NSUTF8StringEncoding)!, encoding: NSUTF8StringEncoding)!
case .Failure(let data, _):
print ("IN")
if let data = data {
info = (NSString(data: data, encoding: NSUTF8StringEncoding)!)
print (info)
}
}
}
return info
}
但我 运行 无法同步进行。我知道制作异步函数(如 Alamorfire 提供的函数)通常不被接受,但在我的情况下,我必须同步完成。
在 Swift 中实现完成块非常容易。
这是带有完成块的函数
func checkIfUserExistsInDB(userName: String, completion:(String) -> Void)
{
Alamofire.request(.POST, "http://blablabla.com/getuserdata", parameters: ["queryValue": userName,], encoding:.JSON).responseJSON { request, response, result in
switch result {
case .Success(let JSON):
let info = String(data: JSON.dataUsingEncoding(NSUTF8StringEncoding)!, encoding: NSUTF8StringEncoding)!
completion(info)
case .Failure(let data, _):
if let errorData = data, info = String(data: errorData, encoding: NSUTF8StringEncoding) {
completion(info)
}
}
}
}
并且可以调用(info
是异步返回的字符串)
checkIfUserExistsInDB("string") { (info) in
print(info)
}