在Swift中对数组内部函数的引用

在Swift中对数组内部函数的引用,第1张

在Swift中对数组内部函数引用

&
只能用于将变量作为
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        }    }}

这有点难看。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5642220.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存