数组 – 使用’import Foundation’的Swift不同的数组行为

数组 – 使用’import Foundation’的Swift不同的数组行为,第1张

概述当我运行以下代码时,我得到了预期的输出: 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, 2, 3] 当我运行以下代码时,我得到了预期的输出:

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 a === b { println("a === b") }if a == b { println("a == b") }

输出:

a == b

有谁知道幕后发生了什么?谢谢.

解决方法 它与可变性有关,尽管导入基础部分很有趣.我的猜测是它与NSArray或NSObject复制有关.

你可以通过改变你的var来让它看,然后看= =再次成为真.

测试不同的排列,看看会发生什么:

两者都是Mutable

var a = [1,3]var b = aif a === b { println("arrays are the same instance") }  // falseif a == b { println("arrays are equivalent") }  // true

可变源,不可变复制

var a = [1,3]let b = aif a === b { println("arrays are the same instance") }  // falseif a == b { println("arrays are equivalent") }  // true

不可变的源,可变复制

let a = [1,3]var b = aif a === b { println("arrays are the same instance") }  // falseif a == b { println("arrays are equivalent") }  // true

两者都是不变的

let a = [1,3]let b = aif a === b { println("arrays are the same instance") }  // trueif a == b { println("arrays are equivalent") }  // true

这实际上是制作防御性副本的正确行为,仅在必要时.

如果您的来源是可变的,您必须制作副本,否则可以在外部进行更改.如果你想要一个可变的副本,你需要复制当然.

没有制作副本的唯一时间是源和副本都是不可变的,因为那样会浪费.

总结

以上是内存溢出为你收集整理的数组 – 使用’import Foundation’的Swift不同的数组行为全部内容,希望文章能够帮你解决数组 – 使用’import Foundation’的Swift不同的数组行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1006377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存