gpt4 book ai didi

arrays - 在 Swift 函数中引用数组

转载 作者:搜寻专家 更新时间:2023-10-31 22:35:41 24 4
gpt4 key购买 nike

我试图在函数中引用一个数组。
像这样:abInt 的数组。

  var inout refArr = &a
if(!someFlag) {
refArr = &b
}
refArr[someIndex] = 30

这不编译,我可以只使用 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 创建对数组的引用:

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
}
}
}

有点丑

关于arrays - 在 Swift 函数中引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com