栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

这有点难看。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636361.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号