斯威夫特3不能转换类型的参数..预期参数类型“INOUT _”
问题描述:
它只是将我的小雨燕项目斯威夫特3.斯威夫特3不能转换类型的参数..预期参数类型“INOUT _”
这里是我不明白一个编译器错误:
var onLoadedClosures: [() ->()] = []
open func onLoaded(closure:() ->()) {
onLoadedClosures += [closure]
}
无法将类型'[() - >()]'的值转换为期望的参数类型'inout _'。
我加了INOUT关键字:
open func onLoaded(closure: inout() ->()) {
onLoadedClosures += [closure]
}
然后,它的工作原理。但为什么向数组添加元素需要inout关键字?虽然我知道什么意思。
答
这是一个令人困惑的错误消息 - 问题是,你需要标记您的closure:
参数作为@escaping
以使其逃过功能onLoaded(closure:)
的寿命(按SE-0103,closure函数现在非逃逸默认)。
var onLoadedClosures: [() ->()] = []
open func onLoaded(closure: @escaping() ->()) {
onLoadedClosures += [closure]
}
当你标记参数作为inout
是因为inout
关闭被定义逃脱(如自己的价值得到在退出函数写回给调用者),它的工作原理的原因。但是在这种情况下,根本不需要inout
参数。
有关@escaping
的详细信息,请参阅the Swift evolution proposal上的更改以及this relevant Q&A。