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 completionParameter (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 @escapingAttribut entfernen , wird der Code kompiliert und ausgeführt, scheint jedoch nicht korrekt zu sein, da der completionAbschluss dem Funktionsumfang entgeht.
@escapingAttributs, 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 ,@escapingwenn der optionalen Verschluss mit vollbringt , was Sie brauchen.