根据苹果博客,他们说:复制一个引用,另一方面,隐式地创建一个共享实例。复制后,两个变量引用数据的单个实例,因此修改第二个变量中的数据也会影响原始变量

 // 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"

这里,ba都指向同一个b。当您通过NSMutableDictionary更新字典时,您将看到a中的更改,因为两个变量都指向同一个字典。

关于swift - 如果NSDictionary是引用类型,那么为什么它不传播自身到子类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47776888/

10-13 00:01