Swift 创建对可变数组的引用

标签 swift

<分区>

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

最佳答案

你不能用 Swift 数组结构来做到这一点,见下文:

“字符串、数组和字典的赋值和复制行为 Swift 的字符串、数组和字典类型是作为结构实现的。这意味着当字符串、数组和字典被分配给新的常量或变量时,或者当它们被传递给函数或方法时,它们会被复制。

这种行为不同于 Foundation 中的 NSString、NSArray 和 NSDictionary,它们是作为类而不是结构实现的。 NSString、NSArray 和 NSDictionary 实例总是作为对现有实例的引用进行分配和传递,而不是作为副本”

摘自:Apple Inc.“The Swift Programming Language”。电子书。 https://itun.es/ca/jEUH0.l

关于Swift 创建对可变数组的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30405068/

相关文章:

ios - 我正在用两行单元格实现 UICollectionView,我需要它们可以同时水平滚动

ios - 添加到 ScrollView 的 UIView 不适合全屏,导航栏位于顶部

ios - RxSwift MVVM 实现查询

ios - SpriteKit 中设备的基本定位

ios - SWIFT/CloudKit - 更新记录并将其保存回容器

ios - Firebase iOS SDK - 缺少数据库 URL

ios - 未在自定义 UITableViewCell 中调用 UIView 的委托(delegate) didSet 属性

ios - 带有 UILabel 多行错误文本支持的自定义 UITextField

swift - 框架问题 - 模块文件是由旧版本的编译器创建的

ios - 检查应用程序是否由于 RemoteNotification 而变得事件(应用程序已启动)