我想要一个函数来返回一个数组的引用:
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
在这种情况下,您只能在闭包中访问拾取的值.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。