更新 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)
我并不太关心引用是无主的,因为数组实际上是自我强大的属性,所以不应该真正意外释放,但使用肯定看起来很难看。当你尝试做一些如此原始的事情时,你需要用可怕的名字Unsafe
调用函数,这是非常令人失望的。
答案 0 :(得分:1)
使用Swift Array结构无法做到这一点,见下文:
“字符串,数组和字典的赋值和复制行为 Swift的String,Array和Dictionary类型实现为结构。这意味着字符串,数组和字典在分配给新常量或变量时,或者传递给函数或方法时,都会被复制。
此行为与Foundation中的NSString,NSArray和NSDictionary不同,它们实现为类,而不是结构。 NSString,NSArray和NSDictionary实例始终作为对现有实例的引用进行分配和传递,而不是作为副本“
摘自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/ca/jEUH0.l