Arrays Xcode 6 b3/b4中的数组引用相等
我只是在操场上玩 这段代码是在beta 2和以前版本上编译的,但不是在beta 3或beta 4上编译的:Arrays Xcode 6 b3/b4中的数组引用相等,arrays,xcode,swift,Arrays,Xcode,Swift,我只是在操场上玩 这段代码是在beta 2和以前版本上编译的,但不是在beta 3或beta 4上编译的: var myArray = ["foo1", "foo2", "foo3"] var myArray2 = myArray myArray2 === myArray myArray2 += "hello" myArray2 === myArray 它声明类型[String]不符合协议AnyObject 我们在b3中读到: 数组已经完全重新设计为具有完全值语义,以匹配字典和字符串的行为
var myArray = ["foo1", "foo2", "foo3"]
var myArray2 = myArray
myArray2 === myArray
myArray2 += "hello"
myArray2 === myArray
它声明类型[String]不符合协议AnyObject
我们在b3中读到:
数组已经完全重新设计为具有完全值语义,以匹配字典和字符串的行为。现在let数组是完全不可变的,var数组是完全可变的
所以说我们丢失了数组的引用相等运算符==
是正确的吗
操作符
=
显然不是一回事,因为它比较数组元素。是的,可以公平地说,我们丢失了数组的==
。数组被设置为true值类型,这意味着它们在分配给新变量时总是被复制。这使得==
毫无意义,因为它永远不会返回true
引用类型(或类)是唯一有意义的地方,因为它们是唯一可以有两个变量引用相同值的类型。这就是为什么错误指出数组不符合协议AnyObject
AnyObject
是所有类的协议。谢谢,我缺少数组总是被复制的部分。现在删除===
的决定对我来说更清楚了。==
只适用于类
(参考类型),而数组
在beta 2中和之前的版本中是结构
(值类型),这根本不正确。数组是一种混合体,只有在修改时才会被复制。