How to return inout (link) in fast function?

I want the function to return an array reference:

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 

I cannot return &a or &b to arrayToPick because they cannot be sent to [Int] .

How to return a link to a or b from a function?

+7
arrays pass-by-reference parameters swift
source share
1 answer

You cannot return the value inout . Because the compiler cannot guarantee the lifetime of the value.

You have an unsafe way, for example:

 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 

In this case, after the release of a d.memory access may result in a BAD_ACCESS error.

Or safe , for example:

 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 

In this case, you can access the selected value only in closing.

+11
source share

All Articles