以下代码可以正常使用
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
这非常愚蠢,可能会对用户产生影响
问题:我的大学并不完全相信猜测,他告诉我必须有更多理由。如果有人能向我解释,我将非常感激
THX
答案 0 :(得分:6)
不使用:
设置只读(常量)字段几乎可以肯定是您程序中出错的原因。
由于您没有其他机会设置let
字段的值,因此该字段的值将保持nil
(或其他默认值)。程序员不太可能发现这种行为是可取的,并且故意要求它。
这就是为什么Swift将这种情况标记为错误的原因。另一方面,如果您确实希望String
常量保持nil
,则可以添加表达式将其设置为nil
,并使错误无效:
let owner: String? = nil // Pretty useless, but allowed
答案 1 :(得分:2)
常量设置一次,仅设置一次。如果您希望它为null或0,那么您可以设置它。你始终在启动时定义一个常量。