Gegeben:
typealias Action = () -> ()
var action: Action = { }
func doStuff(stuff: String, completion: @escaping Action) {
print(stuff)
action = completion
completion()
}
func doStuffAgain() {
print("again")
action()
}
doStuff(stuff: "do stuff") {
print("swift 3!")
}
doStuffAgain()
Gibt es eine Möglichkeit, den completion
Parameter (und action
) vom Typ zu machen Action?
und auch zu behalten @escaping
?
Das Ändern des Typs führt zu folgendem Fehler:
Das Attribut @escaping gilt nur für Funktionstypen
Wenn Sie das @escaping
Attribut entfernen , wird der Code kompiliert und ausgeführt, scheint jedoch nicht korrekt zu sein, da der completion
Abschluss dem Funktionsumfang entgeht.
@escaping
Attributs, Kompilieren und Ausführen des Codes" - Dies liegt daran, dass, wie in SR-2444 beschrieben ,Action?
standardmäßig ein Escapezeichen angezeigt wird. So, das Entfernen ,@escaping
wenn der optionalen Verschluss mit vollbringt , was Sie brauchen.