为什么可选常量不会自动具有默认值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,那么你可以设置它。 你总是在启动时定义一个常量。