【问题标题】:Why are function parameters immutable in Swift?为什么函数参数在 Swift 中是不可变的?
【发布时间】:2016-10-26 17:29:43
【问题描述】:

Swift 3 documentation 声明参数是不可变的:

函数参数默认为常量。

它还 states that 值类型在传递给函数时被复制:

字符串、数组和字典在传递给函数或方法时会被复制。

那么,为什么参数不可变又被复制了?如果参数是一个常量,那么我们不需要在函数范围内复制它的值。如果参数被复制,那么传入的原始变量不能在函数中修改(对于值类型)。

此外,不变性似乎很不方便,因为如果不先将参数显式(再次)复制到局部变量,我们就无法对参数进行本地更改。

我是否错误地阅读了文档?这种情况有充分的理由吗?

【问题讨论】:

  • 仅供参考 - 复制字符串、数组和字典,因为它们是 struct 类型(值类型),而不是 class 类型(引用类型)。复制是针对任何分配完成的,而不仅仅是作为参数。
  • 是的,这对于赋值是有意义的,但我的困惑是为什么值类型既被复制又作为参数不可变(一个或另一个就足够了?)。
  • 将所有参数视为let
  • 好的,但是为什么要使用let 并复制它呢?

标签: swift swift3


【解决方案1】:

这里描述了这样做的动机:https://github.com/apple/swift-evolution/blob/master/proposals/0003-remove-var-parameters.md

tl;dr:避免与 inout 关键字混淆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多