使异步alamofire请求同步
我试图在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 }
但我遇到麻烦同步。 我知道制作异步function(如Alamorfire提供的function)通常不被接受,但在我的情况下,我必须同步进行。
在Swift中实现完成块非常容易。
这是你的完成块function
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) }