arrays - 如何在 Swift 中获取指向数组的指针(而不是副本)?

标签 arrays swift pointers

在 Swift 中,将一个数组赋值给一个新变量实际上就是复制。例如(如苹果文档中的 Array ):

var numbers = [1, 2, 3, 4, 5]
var numbersCopy = numbers
numbers[0] = 100
print(numbers)
// Prints "[100, 2, 3, 4, 5]"
print(numbersCopy)
// Prints "[1, 2, 3, 4, 5]"

我如何实际获得指向同一个数组的指针,以便修改元素反射(reflect)在同一个数组中? (这样做的原因是我在另一个类的静态实例中访问,例如“SomethingManager.sharedInstance.arrayList[aKey]”,我想将其缩短为分配的指针变量。)

(我很想知道如何在 Swift 4 和 5 中执行此操作。我没有看到任何关于 Swift 语言的现有问题。)

编辑:

我提供了需要指针而不是副本的理由。

比如说,我有以下代码:

var childrenTasks = [Int64: [TaskRef]]()

定义在一个类中,被访问:

MyClass.singleton.parentTask[parentTaskID].childrenTask[taskRefID]

如您所见,访问 childrenTask 的代码很长。我想要一个指针,只是一个例子:-

var aPointerToChildrenTasks = MyClass.singleton.parentTask[parentTaskID].childrenTask[taskRefID] // I want a pointer, not a copy!
aPointerToChildrenTask.remove(at: anIndex) // if it is a pointer, I can manipulate the same set of values of the array

这将有助于使我的代码更易于阅读。我需要一个指针来操作同一组值,所以我使用“var”。如果它只是只读的,我可以使用“let”,但如果我得到一个副本,它仍然会降低性能。

如何在 Swift 中获取指针?这可能吗? (我知道在 Kotlin 中这是可能的,因为它是传递引用。)

编辑:我看到有人认为这个问题是重复的。不它不是。那些其他问题/答案专门针对 inout 参数。对于我的情况,我只想要一个指针在相同的函数/方法中工作。

最佳答案

不是“纯”Swift 解决方案,而是使用 NSArray将为您提供所需的引用语义。

NSArray 可免费桥接到 Array,因此您可以使用普通的 as 而不是 as!

var numbers = [1, 2, 3, 4, 5]
var numbersCopy = numbers as NSArray
numbers[0] = 100
print(numbers)

[100, 2, 3, 4, 5]

print(numbersCopy as Array)

[1, 2, 3, 4, 5]

如果您要修改“副本”,则需要使用 NSMutableArray

编辑: 哎呀🤭 我想我对变量 numbersCopy 的命名感到困惑。我现在看到您希望“副本”与原始文件共享相同的值。通过在 block 中捕获变量 numbers,然后执行该 block ,您可以获得 numbers 的当前值,并且根本不需要使用 NSArray。

var numbers = [1, 2, 3, 4, 5]
var numbersCopy = {numbers}
numbers[0] = 100
print(numbers)

[100, 2, 3, 4, 5]

print(numbersCopy())

[100, 2, 3, 4, 5]

关于arrays - 如何在 Swift 中获取指向数组的指针(而不是副本)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54475084/

相关文章:

javascript - 从嵌套的谷歌地图标记数组获取标记位置

javascript - 有没有办法在javascript中重新组织以下数组?

c - 两个进程共享内存中的结构体数组

arrays - Delphi 10.2.3中的Setlength用于类似数组的类型

ios - 使用 Swift 将 UILabel 动态定位到内容 View 的底部?

swift - Firebase 电子邮件/密码身份验证 + 验证怪异

c - 结构体外部的指针和结构体内部的指针指向同一个数组,但存储地址不同

ios - 自定义 UitableViewCell 显示表格某些行的重复数据

C指针的烦恼

c - 指向整数数组的指针的标量初始值设定项的多余元素