2016-04-25 120 views
5

我試圖執行迅速進行異步alamofire要求同步

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 
} 

的alamofire POST請求,但我遇到了麻煩使其同步。我知道製作一個異步函數(就像Alamorfire提供的那個函數)通常不被接受,但在我的情況下,我必須同步執行。

+1

試圖瞭解異步模式。總有一種方法可以符合它。在你的情況下,實現一個完成塊來返回數據,例如'func checkIfUserExistsInDB(userName:String,completion:(String) - > Void)' – vadian

+0

你能否詳細說明一下?我對swift很新穎 – mark

+0

我寫了一個答案。 – vadian

回答

7

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