是否可以创建一个在 Swift 中采用 "inout" 参数的函数数组?

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