我正在尝试引用函数内部的数组。 像这样:a和b是的数组Int。
a
b
Int
var inout refArr = &a if(!someFlag) { refArr = &b } refArr[someIndex] = 30
这不会编译,我只能inout用于函数参数吗?如果是这样,我该如何在函数内进行引用/指针?
inout
&只能用于将变量作为inout参数传递给函数。因此,最简单的解决方案可能是在函数内部使用一个辅助函数:
&
func foo() { func helper(inout array : [Int]) { array[2] = 99 } var a = [1, 2, 3, 5, 6] var b = [4, 5, 6, 7] let someFlag = true if someFlag { helper(&a) } else { helper(&b) } // ... }
您 可以使用以下命令 创建对数组的引用UnsafeMutableBufferPointer:
UnsafeMutableBufferPointer
let ref = someFlag ? UnsafeMutableBufferPointer(start: &a, count: a.count) : UnsafeMutableBufferPointer(start: &b, count: b.count) ref[2] = 99
但是此解决方案有两个问题:
UnsafeMutableBufferPointer()
因此,为了安全地进行此工作,您必须添加一些代码:
withExtendedLifetime(a) { () -> Void in withExtendedLifetime(b) { () -> Void in let ref = someFlag ? UnsafeMutableBufferPointer(start: &a, count: a.count) : UnsafeMutableBufferPointer(start: &b, count: b.count) if ref.count > 2 { ref[2] = 99 } } }
这有点难看。