更新Swift数组太奇怪了.如果需要这种行为,我认为使用NSMutableArrays更可靠.
我知道Swift通常按值而不是通过引用传递数组,但我需要能够在代码中传递引用,如下所示:
var arr1 = [1,2,4]var arr2 = [4,6,3]var result = pickOne() ? arr1 : arr2result[2] = 7// one of these should be updated,currently they are just as initializedprintln(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
总结以上是内存溢出为你收集整理的Swift创建对可变数组的引用全部内容,希望文章能够帮你解决Swift创建对可变数组的引用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)