我正在阅读文档,并且在语言的一些设计决策中不断摇头。但是,真正让我感到困惑的是如何处理数组。
我冲到操场上,尝试了一下。您也可以尝试。所以第一个例子:
var a = [1, 2, 3] var b = a a[1] = 42 a b 这里a和b都是[1, 42, 3],我都可以接受。引用了数组-确定!
现在看这个例子:
var c = [1, 2, 3] var d = c c.append(42) c d c是[1, 2, 3, 42]BUT d的[1, 2, 3]。也就是说,d在上一个示例中看到了更改,但在此示例中没有看到它。文档说那是因为长度改变了。
现在,这个怎么样:
var e = [1, 2, 3] var f = e e[0..2] = [4, 5] e f e是[4, 5, 3],这很酷。可以进行多索引替换,但是f即使长度没有更改,STILL也看不到更改。
综上所述,如果更改1个元素,则对数组的公共引用会发生更改,但是如果更改多个元素或附加项,则会创建一个副本。
对我来说,这似乎是一个非常糟糕的设计。我是这样想的吗?有没有我看不出为什么数组应该这样工作的原因?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Xcode 6 beta 3的行为已更改。数组不再是引用类型,而是具有写时复制机制,这意味着一旦您从一个或另一个变量更改了数组的内容,就将复制该数组,并且仅复制一本将被更改。 问题来源于stack overflow