【发布时间】:2016-09-20 21:03:27
【问题描述】:
以下代码运行良好
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
我查了一下,原来是因为optional变量自动有一个默认值nil
我猜: 因为一旦设置了常量,就无法更改,如果可选常量自动收到nil,那么它将保持为不可更改的nil,这非常愚蠢而且可能对用户不利
问题:我的大学并不完全相信这个猜测,他告诉我肯定有更多的原因。如果有人能向我解释一下,我将不胜感激
谢谢
【问题讨论】:
-
你猜对了。将
let值默认为nil会有什么可能的用例?但这很可能是一个错误,因此出现错误肯定会有所帮助。 -
您可以将此示例归结为
let foo:String?; print(foo)与var foo:String?; print(foo)顺便说一句。