我只是在游乐场玩耍。
此代码在beta 2及之前版本上编译,但未在beta 3或beta 4上编译:
var myArray = ["foo1", "foo2", "foo3"]
var myArray2 = myArray
myArray2 === myArray
myArray2 += "hello"
myArray2 === myArray
它声明 Type [String]不符合协议AnyObject 。
在Swift blog上我们在b3中看到了这一点:
数组已经完全重新设计,具有完整的值语义,以匹配Dictionary和String的行为。现在let数组是完全不可变的,var数组是完全可变的。
那么说我们丢失了数组的引用相等运算符===
是正确的吗?
运算符==
显然不是一回事,因为它会比较数组元素。
答案 0 :(得分:0)
是的,可以公平地说我们丢失了===
数组。数组是真正的值类型,这意味着它们在分配给新变量时总是被复制。这使得===
毫无意义,因为它永远不会返回真实。
引用类型(或类)是===
有意义的唯一地方,因为它们是唯一可以使两个变量引用具有相同值的类型。这就是为什么错误说数组不符合AnyObject协议的原因。 AnyObject
是所有类的协议。