Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如果NSDictionary是引用类型,那么为什么它不将自身传播到子类?_Swift - Fatal编程技术网

Swift 如果NSDictionary是引用类型,那么为什么它不将自身传播到子类?

Swift 如果NSDictionary是引用类型,那么为什么它不将自身传播到子类?,swift,Swift,根据苹果的博客,他们说:另一方面,复制引用会隐式地创建一个共享实例。复制后,两个变量引用数据的单个实例,因此修改第二个变量中的数据也会影响原始变量 // Reference type example class C { var data: Int = -1 } var x = C() var y = x // x is copied to y x.data = 42 // changes t

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

 // 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
。然后你把
b
指向同一本词典。但随后您将一个全新的Swift字典分配给
a
。这对
b
没有影响
b
仍然指向分配给它的原始
NSDictionary
。将
a
重新分配给其他对象永远不会改变
b

这里有一个更好的测试

var a = NSMutableDictionary()
b = a
a["a"] = "b"
b.object(forKey: "a") // "b"

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

您的第二个测试无效。将
NSDictionary
分配给
a
。然后你把
b
指向同一本词典。但随后您将一个全新的Swift字典分配给
a
。这对
b
没有影响
b
仍然指向分配给它的原始
NSDictionary
。将
a
重新分配给其他对象永远不会改变
b

这里有一个更好的测试

var a = NSMutableDictionary()
b = a
a["a"] = "b"
b.object(forKey: "a") // "b"
这里,
a
b
都指向相同的
NSMutableDictionary
。当您通过
a
更新该字典时,您将看到
b
中的更改,因为这两个变量都指向同一个字典。

var a=NSDictionary()
后跟
a=[“a”:“b”]
,这是对
a
的过度引用。你在找这个:?
a=[“a”:“b”]
a
指向一本全新的词典。尝试将
a
设置为
NSMutableDictionary
,然后插入一个新的键。
var a=NSDictionary()
后跟
a=[“a”:“b”]
,您的设置过度了
a
。你在找这个:?
a=[“a”:“b”]
a
指向一本全新的词典。尝试制作
a
一个
NSMutableDictionary
,然后插入一个新键。