gpt4 book ai didi

arrays - 如何在 swift 函数中返回一个 inout(引用)?

转载 作者:IT王子 更新时间:2023-10-29 05:30:03 27 4
gpt4 key购买 nike

我想要一个返回数组引用的函数:

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].

如何从函数返回对 ab 的引用?

最佳答案

您不能返回 inout 值。因为编译器不能保证值的生命周期。

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

var a = [1, 2]
var b = [3, 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错误。

或者安全方式,像这样:

var a = [1, 2]
var b = [3, 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

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

关于arrays - 如何在 swift 函数中返回一个 inout(引用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27539533/

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