根据苹果博客,他们说:复制一个引用,另一方面,隐式地创建一个共享实例。复制后,两个变量引用数据的单个实例,因此修改第二个变量中的数据也会影响原始变量
// Reference type example
class C { var data: Int = -1 }
var x = C()
var y = x // x is copied to y
x.data = 42 // changes the instance referred to
by x (and y)
println("\(x.data), \(y.data)") // prints "42, 42"
然后我在NSDictionary类中尝试了它。但它并不像普通班那样工作。所以我不能使用NSDictionary类作为上面示例中的类型?
var a = NSDictionary()
var b = a
a = ["a":"b"]
b.object(forKey: "a") . //nil
最佳答案
你的第二次考试无效。将NSDictionary
指定给a
。然后你指向同一本字典。但是,然后您将一个全新的Swift字典分配给b
。这对a
没有影响。b
仍然指向分配给它的原始b
。将NSDictionary
重新指派给其他对象永远不会改变a
。
这是一个更好的测试。
var a = NSMutableDictionary()
b = a
a["a"] = "b"
b.object(forKey: "a") // "b"
这里,
b
和a
都指向同一个b
。当您通过NSMutableDictionary
更新字典时,您将看到a
中的更改,因为两个变量都指向同一个字典。关于swift - 如果NSDictionary是引用类型,那么为什么它不传播自身到子类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47776888/