2016-09-19 9 views
0

У меня есть функция, которая захватывает пару переменных из онлайн-JSON, одна из которых является переменной Approved, которая установлена ​​в "true". Когда я вызываю функцию, в первый раз я получу предупреждение «Отклонено», поскольку переменная 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") 
      } 
     } 
    } 
} 
Смежные вопросы