gpt4 book ai didi

Swift 创建对可变数组的引用

转载 作者:搜寻专家 更新时间:2023-10-31 19:39:22 24 4
gpt4 key购买 nike

<分区>

更新 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 的函数,这非常令人失望。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com