Vic*_*nin 7 arrays reference swift
我想将一个数组传递给一个对象并存储对该数组的引用.我希望能够在此对象中修改此数组,并确保在其他任何位置修改它.
这是我想要完成的(代码如何工作)
class Foo {
var foo : Array<Int>
init(foo: Array<Int>) {
self.foo = foo
}
func modify() {
foo.append(5)
}
}
var a = [1,2,3,4]
let bar = Foo(a)
bar.modify()
print(a) // My goal is that it will print 1,2,3,4,5
Run Code Online (Sandbox Code Playgroud)
到目前为止我的发现
A)数组(默认情况下)以奇怪的方式传递.在修改数组长度之前,它是一个引用.一旦修改了长度,它就会被复制和修改.因此,如果我在对象中追加或删除任何内容,则不会在外面看到它
B)我可以inout在函数参数上使用.这将允许我在此功能中修改它.但是,只要我尝试将其分配给某个对象成员,我再次被A)击中
C)我可以在一些Container类中包装一个数组.这可能是最干净的方式.但是,我序列化/反序列化这些对象,我宁愿不把它放在Container中(因为我将不得不解决一些事情,用于序列化和反序列化并将其发送到服务器).
还有别的吗?我错过了一些允许我这样做的Swift构造吗?
从Swift 编程语言来看,
Structures are always copied when they are passed around in your code, and do not use reference counting.
如果您检查数组变量的内容,您会发现追加确实有效:
类 Foo {
var foo:数组
初始化(_ foo:数组){
self.foo = foo
}
函数修改(){
foo.append(5)
}
函数 printFoo() {
print("self.foo: \(foo)")
}
}
让 a = [1,2,3,4]
让 bar = Foo(a)
栏.修改()
酒吧.printFoo()
打印(“a:\(a)”)
产生
self.foo: [1, 2, 3, 4, 5] 一:[1,2,3,4]
您获取了a 的副本,而不是对 a 的引用。
| 归档时间: |
|
| 查看次数: |
2567 次 |
| 最近记录: |