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?
Ainsi, au lieu de 'var IP2 = ""' Je mets 'var IP2: String = ""{didSet { }} '? – FrankFabregat
oui, essayez ceci. Je ne suis pas sûr mais cela pourrait vous aider –
et qu'est-ce que je mets exactement dans la partie didSet {}? @TungVuDuc – FrankFabregat