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不相同”?
答案 0 :(得分:0)
好吧,它看起来像个bug。
数组是swift中的值类型,但复制行为与其他值类型(如枚举,字典)略有不同。
对于数组,只有在执行可能会修改数组长度的操作时才会进行复制。
这意味着如果您想要一个可以改变数组长度的操作,就会发生复制。像添加或删除项目一样,替换项目。在您的情况下,您只是将数组分配给一个新变量。我不认为改变阵列长度的可能性。
答案 1 :(得分:0)
稍微检查一下函数头后,我意识到了
===
运算符通常仅定义为对象(AnyObject
)
Array
是一个结构,但他们也为数组添加了===
运算符
/// Returns true iff these arrays reference exactly the same elements.
func ===<T : ArrayType, U : ArrayType>(lhs: T, rhs: U) -> Bool
根据我的理解,对于您的示例应该是true
,所以它实际上可能是一个错误。
编辑:这已在DP2中修复