数组 – 使用’import Foundation’的Swift不同的数组行为
发布时间:2020-12-14 04:40:52 所属栏目:百科 来源:网络整理
导读:当我运行以下代码时,我得到了预期的输出: var a = [1,2,3]var b = aif a === b { println("a === b") }if a == b { println("a == b") } 输出: a === b a == b 但是,如果我突然导入基金会我只有一个新的输出: import Foundation var a = [1,3]var b = aif
当我运行以下代码时,我得到了预期的输出:
var a = [1,2,3] var b = a if a === b { println("a === b") } if a == b { println("a == b") } 输出:
但是,如果我突然导入基金会我只有一个新的输出: import Foundation var a = [1,3] var b = a if a === b { println("a === b") } if a == b { println("a == b") } 输出:
有谁知道幕后发生了什么?谢谢. 解决方法
它与可变性有关,尽管导入基础部分很有趣.我的猜测是它与NSArray或NSObject复制有关.
你可以通过改变你的var来让它看,然后看= =再次成为真. 测试不同的排列,看看会发生什么: 两者都是Mutable var a = [1,3] var b = a if a === b { println("arrays are the same instance") } // false if a == b { println("arrays are equivalent") } // true 可变源,不可变复制 var a = [1,3] let b = a if a === b { println("arrays are the same instance") } // false if a == b { println("arrays are equivalent") } // true 不可变的源,可变复制 let a = [1,3] var b = a if a === b { println("arrays are the same instance") } // false if a == b { println("arrays are equivalent") } // true 两者都是不变的 let a = [1,3] let b = a if a === b { println("arrays are the same instance") } // true if a == b { println("arrays are equivalent") } // true 这实际上是制作防御性副本的正确行为,仅在必要时. 如果您的来源是可变的,您必须制作副本,否则可以在外部进行更改.如果你想要一个可变的副本,你需要复制当然. 没有制作副本的唯一时间是源和副本都是不可变的,因为那样会浪费. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |