我更新斯威夫特3後無法正常使用下面的代碼行的困難:奇怪避開功能的行爲3
private var functionHandlers = [(() -> Int) ->()]()
private var myFunction: (() -> Int)?
func doRegister() {
functionHandlers.append { (f: (() -> Int)) in
myFunction = f
}
}
這給我的編譯器錯誤:Assigning non-escaping parameter 'f' to an escaping closure
所以後來,我想這:
func doRegister() {
functionHandlers.append { (f: @escaping (() -> Int)) in
myFunction = f
}
}
這:
func doRegister() {
functionHandlers.append { (f: (@escaping() -> Int)) in
myFunction = f
}
}
其中,在這兩種情況下,固定我的第一個錯誤,但後來給了我一個新的編譯器錯誤:Cannot convert value of type '(@escaping (() -> Int)) ->()' to expected argument type '(() -> Int) ->()'
於是我試圖改變的functionHandlers
類型如下:
private var functionHandlers = [(@escaping (() -> Int)) ->()]()
但只是導致語法錯誤。
任何人都可以向我解釋爲什麼發生這種情況,我能做些什麼來解決這個問題?
'.append {}'尾隨閉包來自哪裏? – Alexander
他正在追加一個函數@AlexanderMomchliov – Hamish
@Hamish哦,我看到 – Alexander