2017-09-04 5 views
0

J'essaie d'obtenir la variable de la concurrence sur une fonction, et le transformer en une variable globale. Ceci est la fonction que je vous appelle:Swift obtenir la valeur de l'achèvement de la fonction et le définir à une variable globale

func getJsonFromUrl(name: String, completion: @escaping (String?)->()) { 
//use name variable just as you would in a normal function 
let URL2 = "https://url.com/asd.php" 
let url = URL(string: URL2) 
URLSession.shared.dataTask(with:url!) { (data, response, error) in 
    if error != nil { 
     print(error as Any) 
     completion(nil) 
    } else { 
     do { 
      guard let parsedData = try JSONSerialization.jsonObject(with: data!) as? [String:Any] else { completion(nil); return } 
      guard let ips = parsedData["ip"] as? String else {completion(nil); return } 
      print("The IP is: " + ips) //Prints the value correctly 
      completion(ips) 
     } catch let error as NSError { 
      print(error) 
      completion(nil) 
     } 
    } 
}.resume() 
} 

Voici comment je l'appelle:

getJsonFromUrl(name: "Bob", completion: { ips in 
      print(ips) 
     }) 

Cependant, je veux tourner ips où je l'appelle à une variable globale. À l'heure actuelle, j'ai une variable déclaré en dehors du ViewController appelé IP2, et voici comment j'ai essayé de définir la variable:

getJsonFromUrl(name: "Bob", completion: { ips in 
      print(ips) 
      ip2 = ips! 
     }) 

Et ce n'est pas mise IP2 à la valeur de ips. Comment peux-tu faire ça?

Répondre

0

Je pense que le problème est dû au fait que l'URLSession est une tâche asynchrone. essayez cela, il pourrait peut aider:

changer la façon dont vous définissez la variable ip2 comme ceci:

var ip2 : String = "" { 
    didSet { 
     //Do something when ip2 get the value 
    } 
} 
+0

Ainsi, au lieu de 'var IP2 = ""' Je mets 'var IP2: String = ""{didSet { }} '? – FrankFabregat

+0

oui, essayez ceci. Je ne suis pas sûr mais cela pourrait vous aider –

+0

et qu'est-ce que je mets exactement dans la partie didSet {}? @TungVuDuc – FrankFabregat