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

标签 arrays function 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

关于arrays - 是否可以在 Swift 中创建一个采用 "inout"参数的函数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28035485/

相关文章:

javascript - Recenter Mapbox map 使用用户坐标

swift - 触摸 "through"另一个物理体? Swift/Spritekit

c++ - 尝试使用 while 循环将数据从文件读入数组。还必须检查以确保第一个也是唯一的值不是 -1

Java 图像字节数组大小

c++ - 这是函数调用还是变量声明?

ios - 在 iOS 的 webrtc 上启用立体声

swift - 在 TableViewCell 中添加 CALayer 触发 CALayerInvalid Exception

arrays - 如何使用冒号运算符将半整数序列压缩为字符串表达式? (如何将列表转换为字符串)

arrays - 从两个数组/slice 中获取交集和排除项的最有效方法是什么?

c - 基本函数指针误解