2016-09-19 49 views
0

我有一个从在线JSON抓取几个变量的函数,其中一个是Approved变量,它被设置为"true"。当我调用函数时,第一次我会得到“Denied”警告,因为Approved变量没有值,因为代码不是异步的,但不管我做了什么,我都无法让它工作。直到第二次它保存了以前的值并转到成功警报。选择不是异步的代码

代码:

@IBAction func approveuser(_ sender: AnyObject) { 
theplace = place //Saving variable. 

Alamofire.request("https://example.com?variable=\(variable)&requested=\(self.place)").responseJSON{ response in 
if let JSON = response.result.value{ 
let json = JSON as! NSDictionary 
Approved = json["Approved"] as! String 
LoadedVersion = json["version"] as! String 
} 
} 



if(AppVersion != LoadedVersion){ 
self.showalert("Update Required", message: "Please update the app", confirm: "Okay") 
return 
} 

if(Approved == "true"){ 
self.showalert("Approved!", message: "Success", confirm: "Okay") 
}else{ 
self.showalert("Denied!", message: "Denied", confirm: "Okay") 
} 
} 

我试图把DispatchQueue.main.async {的地方我可以在代码,但它仍然不希望工作无论在哪里我把它。

+1

你应该真的拥抱异步性,并在回调中做你的东西。如果您真的必须等待,请尝试使用http://stackoverflow.com/a/38758847/14955中的信号量 – Thilo

回答

1

哪里把主队列上的异步代码?

我觉得像下面这样按照你的意图工作。

@IBAction func approveuser(_ sender: AnyObject) { 
    theplace = place //Saving variable. 

    Alamofire.request("https://example.com?variable=\(variable)&requested=\(self.place)").responseJSON{ response in 
     if let JSON = response.result.value{ 
      let json = JSON as! NSDictionary 
      Approved = json["Approved"] as! String 
      LoadedVersion = json["version"] as! String 
     } 

     DispatchQueue.main.async { 

      if(AppVersion != LoadedVersion){ 
       self.showalert("Update Required", message: "Please update the app", confirm: "Okay") 
       return 
      } 

      if(Approved == "true"){ 
       self.showalert("Approved!", message: "Success", confirm: "Okay") 
      }else{ 
       self.showalert("Denied!", message: "Denied", confirm: "Okay") 
      } 
     } 
    } 
}