optional实现 - swift optional用法



为什么可选常量不会自动具有默认值nil (2)

这个问题在这里已有答案:

以下代码工作正常

struct carConfi {
    var owner: String?
    let brand: String = "BMW"
    var currentMile: Double = 2000
}

let tomCar = carConfi()

但是,如果我将属性 owner 的类型更改为常量,则初始化程序将出错

struct carConfi {
        let owner: String? // Change to constant
        let brand: String = "BMW"
        var currentMile: Double = 2000
    }

let tomCar = carConfi() //error: missing argument for parameter 'owner' in call 

我做了一点搜索,结果是因为 可选 变量自动具有默认值nil

我猜: 因为一旦设置了常量,它就无法改变,如果可选常量自动收到 nil 那么它将保持为一个不可改变的 nil 非常愚蠢并且可能会对用户产生影响

问: 我的大学并不完全相信猜测,他告诉我必须有更多理由。 如果有人能向我解释,我将非常感激

谢谢


不使用以下任一项设置只读(常量)字段:

  • 初始化表达式
  • 初始化

几乎可以肯定是你的程序出错了。

由于您没有其他机会设置 let 字段的值,因此字段的值将保持为 nil (或其他一些默认值)。 程序员不太可能发现这种行为是可取的,并且故意要求它。

这就是为什么Swift将这种情况标记为错误的原因。 另一方面,如果您确实希望 String 常量保持为 nil ,则可以添加一个表达式将其设置为 nil ,并使错误静音:

let owner: String? = nil // Pretty useless, but allowed

常量设置一次,仅设置一次。 如果您希望它为null或0,那么您可以设置它。 你始终在启动时定义一个常量。





optional