<分区>
更新 Swift 数组太奇怪了。如果需要这种行为,我认为只使用 NSMutableArray
更可靠。
我知道 Swift 通常按值而不是按引用传递数组,但我需要能够像这样在代码中传递引用:
var arr1 = [1, 2, 4]
var arr2 = [4, 6, 3]
var result = pickOne() ? arr1 : arr2
result[2] = 7
// one of these should be updated, currently they are just as initialized
println(arr1)
println(arr2)
我想动态选择两个数组之一,然后对该数组进行更改。两个数组的大小和内容类型都相同,我只会更改元素,而不是添加或删除元素。我怎样才能做到这一点?
编辑:答案是只使用 NSMutableArray
吗?
澄清一下:pickOne()
是我已有的一个函数,根据该函数的结果,我想修改第一个或第二个数组。所以我不需要帮助来决定选择哪个。我需要帮助弄清楚如何对所需的数组进行修改(并且会有多个修改),而不必检查每次修改使用哪个数组。
我可以这样做:
if pickOne() {
// work on arr1
// ...
} else {
// work on arr2
// ...
}
// do some other work
// ...
if pickOne() {
// work more on arr1
// ...
} else {
// work more on arr2
// ...
}
// do yet another set of things
// ...
if pickOne() {
// work again on arr1
// ...
} else {
// work again on arr2
// ...
}
但这很快就过时了。
编辑 到目前为止,我在这里取得了一些进展
var result = pickOne() ? UnsafeMutableBufferPointer(start: &arr1, count: arr1.count) : UnsafeMutableBufferPointer(start: &arr2, count: arr2.count)
我不太在意引用是无主的,因为数组实际上是 self 的强持有属性,所以不应该真的被意外释放,但用法确实看起来很难看。当您尝试做一些如此原始的事情时,您需要调用具有可怕名称 Unsafe
的函数,这非常令人失望。