Дано:
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()
Есть ли способ сделать completion
параметр (и action
) типа, Action?
а также сохранить @escaping
?
Изменение типа приводит к следующей ошибке:
Атрибут @escaping применяется только к типам функций
При удалении @escaping
атрибута код компилируется и запускается, но, по-видимому, он не является правильным, поскольку completion
замыкание выходит за рамки функции.
@escaping
атрибута, код компилируется и работает» - это потому , что, как описано в SR-2444 ,Action?
является, по умолчанию, убегая. Таким образом, удаление@escaping
при использовании дополнительного закрытия завершает то, что вам нужно.