为什么可选常量不会自动具有默认值 nil
Why optional constant does not automatically have a default value of nil
下面的代码工作正常
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
这很愚蠢,可能违背用户意愿
问题:我的大学并不完全相信这个猜测,他告诉我一定有更多的理由。如果有人能向我解释一下,我将不胜感激
感谢
常量设置一次,而且只设置一次。如果您希望它为 null 或 0,则可以设置它。您总是在启动时定义一个常量。
不设置只读(常量)字段:
- 初始化表达式
- 初始化程序
几乎可以肯定表明您的程序存在错误。
由于您没有其他机会设置 let
字段的值,因此该字段的值将保持 nil
(或其他一些默认值)。程序员不太可能发现这种行为是可取的,并故意要求它。
这就是 Swift 将这种情况标记为错误的原因。另一方面,如果您确实希望 String
常量保持 nil
,您可以添加一个表达式将其设置为 nil
,并消除错误:
let owner: String? = nil // Pretty useless, but allowed
下面的代码工作正常
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
这很愚蠢,可能违背用户意愿
问题:我的大学并不完全相信这个猜测,他告诉我一定有更多的理由。如果有人能向我解释一下,我将不胜感激
感谢
常量设置一次,而且只设置一次。如果您希望它为 null 或 0,则可以设置它。您总是在启动时定义一个常量。
不设置只读(常量)字段:
- 初始化表达式
- 初始化程序
几乎可以肯定表明您的程序存在错误。
由于您没有其他机会设置 let
字段的值,因此该字段的值将保持 nil
(或其他一些默认值)。程序员不太可能发现这种行为是可取的,并故意要求它。
这就是 Swift 将这种情况标记为错误的原因。另一方面,如果您确实希望 String
常量保持 nil
,您可以添加一个表达式将其设置为 nil
,并消除错误:
let owner: String? = nil // Pretty useless, but allowed