Alle Tutorials, die ich über Swift 3 JSON Parsing gesehen oder gelesen habe, enthalten JSON Parsing Code innerhalb viewDidLoad()
func/Methode und es funktioniert gut. Ich möchte JSON Parsing-Code in einer eigenen Funktion platzieren und es von viewDidLoad()
aufrufen. Unten Beispiel:JSON Parsing in seiner eigenen separaten Funktion funktioniert nicht
class ViewController: UIViewController {
var ArrayImages = [String]();
override func viewDidLoad() {
super.viewDidLoad()
var json = ParseJson();
print("My Array = \(ArrayImages)");
}
// NEW FUNCTION
func ParseJson() {
let url = URL(string: "http://etasawoq.com/go_categories.php")!
URLSession.shared.dataTask(with: url) { (data, response, error) in
if (error != nil){
print("Error Found Creating URLSession : \(error)")
} else {
if let ParsedJson = data {
do {
let json = try JSONSerialization.jsonObject(with: ParsedJson, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
for x in json {
let row = x as! NSDictionary;
let imageUrl = row["image_url"] as! String
self.ArrayImages.append(imageUrl);
}
} catch {
print("Json Processing failed \(error)");
}
}
}
}.resume() // start session
}
}
Leider ist die „ArrayImages“ nicht aufgefüllt werden, wenn die ParseJson
Funktion aufrufen. Die Druckausgabe ist "My Array = []". Warum das? Wie kann ich dieses Problem lösen, während ich den JSON-Parsing-Code in einer separaten Funktion halte?
Ihr 'ParseJson'method ist async Anruf, so wird es im Hintergrund ausgeführt werden, so dass' print ("My Array = \ (ArrayImages)"); 'vor der Fertigstellung Block' dataTask ausgeführt wird (mit:) ' –
Ihr Code würde genau das gleiche Problem haben, selbst wenn es alles in' viewDidLoad' wäre. – rmaddy
Dann, wie kann dieses Problem gelöst werden? image Ich möchte einen tableView mit dem Namen eines Schauspielers füllen. Wie erreiche ich das mit meinem aktuellen Code? – Aboodnet