[Swift]Swift @escaping und Completion Handler
Hallo ich versuche, 'Closure' von Swift genauer zu verstehen.
Aber @escaping
und Completion Handler
sind zu schwer zu verstehen
ich viele Nachrichten und offizielle Dokumente von Swift gesucht, aber ich fühlte mich stil nicht genug
Dies ist das Codebeispiel von offiziellen Dokumenten
var completionHandlers: [()->Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping()->Void){
completionHandlers.append(completionHandler)
}
func someFunctionWithNoneescapingClosure(closure:()->Void){
closure()
}
class SomeClass{
var x:Int = 10
func doSomething(){
someFunctionWithEscapingClosure {
self.x = 100
//not excute yet
}
someFunctionWithNoneescapingClosure {
x = 200
}
}
}
let instance = SomeClass()
instance.doSomething()
print(instance.x)
completionHandlers.first?()
print(instance.x)
Ich habe gehört, dass es gibt zwei Möglichkeiten und Gründe mit @esacping
Erste s Schließung chungs, Zweiter ist Async Betrieb Zweck
Und von jetzt an sie meine Fragen sind
Erstens, wenn doSomething
dann die Ausführung someFunctionWithEscapingClosure
mit Verschluss Parametern ausführen und dass Schließung wird in der globalen Variablen-Array gespeichert werden.
Ich denke, dass Verschluss {self.x = 100}
Wie self
in {self.x = 100}, die in globalen Variablen gespeichert completionHandlers
zu instance
das Objekt von SomeClass
herstellen kann?
Zweitens verstehe ich someFunctionWithEscapingClosure
wie folgt.
Um lokale Variable Schließung completionHandler
zu globalen Variable 'CompletionHandlers` speichern wir verwenden @ escaping Schlüsselwort!
ohne Schlüsselwort @escaping someFunctionWithEscapingClosure
kehrt, completionHandler
lokale Variable aus dem Speicher entfernen wird
@escaping wird in den Speicher, der Verschluss halten
Ist das richtig?
Zuletzt frage ich mich nur über die Existenz dieser Grammatik.
Vielleicht ist dies eine sehr rudimentäre Frage
, wenn wir eine Funktion nach einiger spezifische Funktion ausführt wollen
warum nennen wir nicht nur eine Funktion nach bestimmten Funktionsaufruf
, was das sind Unterschiede zwischen der Verwendung von oben Muster und Verwendung der escape Callback-Funktion
Vielen Dank für das Lesen lange Fragen und Entschuldigung für ich bin nicht native
Ihre Links waren sehr hilfreich –
Danke, genießen in Swift Codierung –