Junior — Middle
Ist es notwendig, einen Escape-Mechanismus für Closures zu verwenden, die als Argumente an eine Funktion übergeben werden?
sobes.tech KI
Antwort von AI
In Swift sind Closures standardmäßig non-escaping, das heißt, sie können nach Abschluss der Funktion, in die sie übergeben werden, nicht gespeichert oder aufgerufen werden.
Wenn das Closure gespeichert und später aufgerufen werden soll (z.B. bei einem asynchronen Aufruf, Callback), muss es als @escaping gekennzeichnet werden.
Beispiel:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// Irgendeine Arbeit
completion() // Closure später aufrufen
}
}
Wenn das Closure nur innerhalb der Funktion verwendet wird und nicht gespeichert wird, ist @escaping nicht notwendig.
Daher sollte der Escaping-Mechanismus nur dann verwendet werden, wenn das Closure nach Verlassen der Funktion aufgerufen werden kann, in die es übergeben wurde.