2016-04-25 7 views
5

Ich versuche eine alamofire Post-Anforderung in SWIFTsie ein asynchrones Anforderungs alamofire synchrones

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 
} 

aber ich bin mit in Schwierigkeiten auszuführen sie synchron zu machen. Ich bin mir bewusst, dass eine asynchrone Funktion (wie die von Alamorfire) nicht allgemein akzeptiert wird, aber in meinem Fall muss ich es synchron tun.

+1

Versuchen Sie, das asynchrone Muster zu verstehen. Es gibt immer einen Weg, sich anzupassen. In Ihrem Fall implementieren Sie einen Completion-Block, um die Daten zurückzugeben, zum Beispiel 'func checkIfUserExistsInDB (benutzername: String, completion: (String) -> Void)' – vadian

+0

Könnten Sie das ausarbeiten? Ich bin sehr schnell zu schnell – mark

+0

Ich schrieb eine Antwort. – vadian

Antwort

7

Es ist ziemlich einfach, einen Komplettierungsblock in Swift zu implementieren.

Das ist Ihre Funktion mit einem Abschluss 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) 
     } 
    } 
    } 
} 

und kann mit aufgerufen werden (info ist die asynchron zurückgegebenen String)

checkIfUserExistsInDB("string") { (info) in 
    print(info) 
} 
Verwandte Themen