加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组 – 如何在swift函数中返回inout(引用)?

发布时间:2020-12-14 05:26:25 所属栏目:百科 来源:网络整理
导读:我想要一个函数来返回一个数组的引用: var a = [1,2]var b = [3,4]func arrayToPick(i:Int) - [Int] { return i == 0 ? a : b}inout var d = arrayToPick(0)d[0] = 6println(a[0]) // 1println(d[0]) // 6 我无法在arrayToPick中返回 a或 b,因为它们无法转
我想要一个函数来返回一个数组的引用:
var a = [1,2]
var b = [3,4]

func arrayToPick(i:Int) -> [Int] {
    return i == 0 ? a : b
}

inout var d = arrayToPick(0)
d[0] = 6

println(a[0]) // 1
println(d[0]) // 6

我无法在arrayToPick中返回& a或& b,因为它们无法转换为[Int].

如何从函数返回a或b的引用?

你不能退还价值.因为编译器无法保证值的生命周期.

你有不安全的方式,像这样:

var a = [1,4]

func arrayToPick(i:Int) -> UnsafeMutablePointer<[Int]> {
    if i == 0 {
        return withUnsafeMutablePointer(&a,{ $0 })
    }
    else {
        return withUnsafeMutablePointer(&b,{ $0 })
    }
}

var d = arrayToPick(0)
d.memory[0] = 6

println(a[0]) // -> 6

在这种情况下,在取消分配a后,d.memory访问可能会导致BAD_ACCESS错误.

或安全的方式,4] func withPickedArray(i:Int,f:(inout [Int]) -> Void) { i == 0 ? f(&a) : f(&b) } withPickedArray(0) { (inout picked:[Int]) in picked[0] = 6 } println(a[0]) // -> 6

在这种情况下,您只能在闭包中访问拾取的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读