Ich bin relativ neu in Swift und Xcode im Allgemeinen und finde eine Menge Schwierigkeiten, dies herauszufinden.Code wird erst ausgeführt, nachdem die asynchrone Funktion ausgeführt wurde
Ich entwickle eine App, die den Parse.com
Backend-Server verwendet. Um den Hauptthread nicht zu blockieren, wird jedes Mal, wenn die App etwas vom Server herunterlädt, asynchron an einem anderen Thread gearbeitet. Der Rest des Codes wird jedoch weiterhin im Hauptthread ausgeführt und stürzt ab, wenn die Daten, die vom Server stammen sollen, noch nicht heruntergeladen wurden. Ich würde gerne wissen, wie man Funktionen aufruft, die ausgeführt werden sollen, nachdem die asynchrone Funktion beendet ist, und dies muss für Funktionen in separaten Dateien getan werden.
Ich habe gelesen, dass Schließungen dabei helfen könnten, aber ich fand dort Syntax sehr schwierig und eine Erklärung würde sehr geschätzt werden. Aber jeder Weg wäre sehr hilfreich.
Dank
Können Sie erklären, wie Sie eine Funktion zu übergeben? Ich habe vorher verstanden, dass Sie die Funktion ausführen, wo Sie "die Funktion aufrufen" geschrieben haben, aber die Funktion befindet sich, wie gesagt, in einer anderen Datei. Der spezielle Fall, mit dem ich gerade arbeite, ist, dass ich eine Funktion geschrieben habe, die zuerst prüft, ob das gesuchte Objekt im lokalen Datenspeicher ist, und falls nicht, überprüft es den Server. Da ich möchte, dass es überall läuft, lege ich es in eine separate Datei. Aber ich brauche es noch, um Funktionen in der Klasse aufzurufen, die es aufgerufen hat. Danke noch einmal. – Acoop
Ich kann es sicherlich erklären _linguistisch_. In Swift sind Funktionen erstklassige Bürger, daher kann Funktion A Funktion B mit Funktion C, die Funktion B speichern kann, verknüpfen. Dann kann Funktion C oder irgendeine andere Funktion mit Zugriff auf die gespeicherte Funktion B Funktion B aufrufen _ Alle Rückrufe funktionieren. Wenn Sie 'UIView.animateWithDuration() {...}' sagen, übergeben Sie dies Cocoa - eine Funktion, die aufgerufen wird, um die Animation auszuführen. Sehen Sie auch mein Buch: http://www.apeth.com/swiftBook/ch02.html#_function_as_value – matt
Jedoch, wie Sie es tun, _architecturally, ist Ihnen überlassen. Im obigen Beispiel könnte 'myMethod' eine Funktion als Parameter annehmen; dann bei "rufe die Funktion" an, du rufst es an. Aber es gibt viele andere mögliche Szenarien. Siehe diesen Beispielcode für ein Beispiel: https://github.com/matnteub/Programming-iOS-Book-Examples/blob/master/bk2ch24p842downloader/ch37p1099downloader/MyDownloader.swift – matt