我更新斯威夫特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