Подано:
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
під час використання додаткового закриття здійснює те, що вам потрібно.