Making a synchronous asynchronous alamofire request

I am trying to execute a post alamofire request in swift

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 } 

but I ran into a problem doing this synchronously. I know that creating an asynchronous function (like that provided by Alamorfire) is usually not accepted, but in my case I have to do it synchronously.

+5
asynchronous ios swift synchronous alamofire
source share
1 answer

It's pretty easy to implement a completion block in Swift.

This is your function with a completion block.

 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) } } } } 

and can be called with ( info is an asynchronously returned string)

 checkIfUserExistsInDB("string") { (info) in print(info) } 
+7
source share

All Articles