Дано:
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
?
Изменение типа дает следующую ошибку:
error: @escaping attribute only applies to function types
Удаление атрибута @escaping
, код компилируется и запускается, но не кажется правильным, так как закрытие completion
ускоряет область действия функции.