2016-04-25 12 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 पोस्ट अनुरोध करने के लिए प्रयास कर रहा हूँ लेकिन मैं इसे तुल्यकालिक बनाने मुसीबत में चला रहा हूँ बना रही है। मुझे पता है कि एक एसिंक्रोनस फ़ंक्शन (जैसे अलामॉर्फियर द्वारा प्रदान किया गया) बनाना आम तौर पर स्वीकार नहीं किया जाता है लेकिन मेरे मामले में मुझे इसे सिंक्रनाइज़ करना पड़ता है।

+1

। इसके अनुरूप होने का हमेशा एक तरीका है। आपके मामले में डेटा को वापस करने के लिए एक समापन ब्लॉक लागू करें, उदाहरण के लिए 'func checkIfUserExistsInDB (उपयोगकर्ता नाम: स्ट्रिंग, समापन: (स्ट्रिंग) -> शून्य) ' – vadian

+0

क्या आप विस्तृत कर सकते हैं? मैं – mark

+0

स्विफ्ट करने के लिए बहुत नया हूं, मैंने एक जवाब लिखा था। – vadian

उत्तर

7

स्विफ्ट में एक समापन ब्लॉक को लागू करना काफी आसान है।

यह एक पूरा होने के ब्लॉक

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) 
} 
संबंधित मुद्दे