【发布时间】:2016-10-26 17:29:43
【问题描述】:
Swift 3 documentation 声明参数是不可变的:
函数参数默认为常量。
它还 states that 值类型在传递给函数时被复制:
字符串、数组和字典在传递给函数或方法时会被复制。
那么,为什么参数既不可变又被复制了?如果参数是一个常量,那么我们不需要在函数范围内复制它的值。如果参数被复制,那么传入的原始变量不能在函数中修改(对于值类型)。
此外,不变性似乎很不方便,因为如果不先将参数显式(再次)复制到局部变量,我们就无法对参数进行本地更改。
我是否错误地阅读了文档?这种情况有充分的理由吗?
【问题讨论】:
-
仅供参考 - 复制字符串、数组和字典,因为它们是
struct类型(值类型),而不是class类型(引用类型)。复制是针对任何分配完成的,而不仅仅是作为参数。 -
是的,这对于赋值是有意义的,但我的困惑是为什么值类型既被复制又作为参数不可变(一个或另一个就足够了?)。
-
将所有参数视为
let。 -
好的,但是为什么要使用
let并复制它呢?