[英]Is it possible to create an array of functions that take “inout” parameters in Swift?
我遇到了我认为可能是错误的问题。 Swift可让您创建函数数组,如下所示:
func example1(a: Int) {
println(a)
}
let functionArray1 = [example1]
println(functionArray1[0](3)) // This prints "3"
但是,如果我尝试创建带有inout
参数的函数数组,则会出现可怕的segmentation fault 11
:
func example2(inout a: Int) {
println(a)
}
let functionArray2 = [example2] // This produces the seg fault
这没有什么区别,如果我确实操纵a
函数内部与否。
有人知道这是怎么回事吗? 有没有一种方法可以通过使用适当的类型注释或其他技巧来创建带有inout
参数的函数数组?
编辑:我试图为数组提供类型注释-无法解决问题:
let functionArray2: [(inout Int) -> ()] = [example2] // Same error...
我还尝试过将函数编写为闭包(带有显式类型注释),然后将闭包添加到数组中,但也没有成功。
正如对该问题的评论所指出的那样,在某些情况下,这确实是与Swift处理类型签名中的inout
有关的错误。
在解决该错误之前,您可以使用UnsafeMutablePointer
来解决它。
func increment(a: UnsafeMutablePointer<Int>) {
a.memory += 1
}
let functionArray = [increment]
var thing = 2
functionArray2[0](&thing)
println(thing) // 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.