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

下面的代码工作正常

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

但是,如果将属性owner的types更改为常量,则初始化程序会出现错误

 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 

我做了一点search,事实certificate,这是因为可选variables自动具有默认值为零

我猜:因为一旦常量被设置,它就不能被改变,如果可选的常量自动收到一个nil那么它将保持为一个不可改变的nil ,这是非常愚蠢的,可能会对用户

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

谢谢

不要设置一个只读(常量)字段:

  • 初始化expression式
  • 初始化

几乎可以肯定地表明你的程序有错误。

由于您没有其他机会来设置您的let字段的值,所以字段的值将保持nil (或其他缺省值)。 程序员不太可能会发现这样的行为是可取的,并且有意要求。

这就是为什么Swift把这种情况标记为错误。 另一方面,如果你真的希望你的String常量保持nil ,你可以添加一个expression式来将它设置nil ,并且消除错误:

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

常量被设置一次,一次。 如果你想要它为null或0,那么你可以设置它。 你总是在启动时定义一个常量。