ldi*_*ual 11 arrays parameters pass-by-reference swift
我想要一个函数来返回一个数组的引用:
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
Run Code Online (Sandbox Code Playgroud)
我无法返回&a或&b进入,arrayToPick因为那些无法投入[Int].
如何返回的参考a或b从一个函数?
rin*_*aro 17
你不能回报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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您只能在闭包中访问拾取的值.
| 归档时间: |
|
| 查看次数: |
6407 次 |
| 最近记录: |