当前位置 : 主页 > 手机开发 > 其它 >

Swift创建对可变数组的引用

来源:互联网 收集:自由互联 发布时间:2021-06-11
参见英文答案 Reference to array inside function in Swift3个 更新Swift数组太奇怪了.如果需要这种行为,我认为使用NSMutableArrays更可靠. 我知道Swift通常按值而不是通过引用传递数组,但我需要能够在
参见英文答案 > Reference to array inside function in Swift                                    3个
更新Swift数组太奇怪了.如果需要这种行为,我认为使用NSMutableArrays更可靠.

我知道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)

我并不太关心引用是无主的,因为数组实际上是自我强大的属性,所以不应该真正意外释放,但使用肯定看起来很难看.当你尝试做一些如此原始的事情时,你需要调用具有可怕名称的函数,这是非常令人失望的.

你不能用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

网友评论