为什么数组在共享时在Swift中彼此不相同?

时间:2014-06-13 09:03:43

标签: arrays swift

var arraya = [1,2,3,4]

var arrayb = arraya

if arraya === arrayb
{
    println("arraya is identical to arrayb")
}
else
{
    println("arraya is not identical to arrayb")
}

为什么xcode打印“arraya与arrayb不相同”?

2 个答案:

答案 0 :(得分:0)

好吧,它看起来像个bug。

数组是swift中的值类型,但复制行为与其他值类型(如枚举,字典)略有不同。

  

对于数组,只有在执行可能会修改数组长度的操作时才会进行复制。

这意味着如果您想要一个可以改变数组长度的操作,就会发生复制。像添加或删除项目一样,替换项目。在您的情况下,您只是将数组分配给一个新变量。我不认为改变阵列长度的可能性。

答案 1 :(得分:0)

稍微检查一下函数头后,我意识到了

  1. ===运算符通常仅定义为对象(AnyObject

  2. Array是一个结构,但他们也为数组添加了===运算符

  3.   /// Returns true iff these arrays reference exactly the same elements.
      func ===<T : ArrayType, U : ArrayType>(lhs: T, rhs: U) -> Bool
    

    根据我的理解,对于您的示例应该是true,所以它实际上可能是一个错误。

    编辑:这已在DP2中修复