Xcode 6 b3 / b4中的数组引用相等

时间:2014-07-24 23:34:37

标签: arrays xcode swift

我只是在游乐场玩耍。

此代码在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数组是完全可变的。

那么说我们丢失了数组的引用相等运算符===是正确的吗?

运算符==显然不是一回事,因为它会比较数组元素。

1 个答案:

答案 0 :(得分:0)

是的,可以公平地说我们丢失了===数组。数组是真正的值类型,这意味着它们在分配给新变量时总是被复制。这使得===毫无意义,因为它永远不会返回真实。

引用类型(或类)是===有意义的唯一地方,因为它们是唯一可以使两个变量引用具有相同值的类型。这就是为什么错误说数组不符合AnyObject协议的原因。 AnyObject是所有类的协议。