原谅这个基本问题。
我声明一个常量是一个可选字符串,然后我去打开它使用if if ....
我收到以下错误:
Constant' favoriteSong'在初始化之前使用
如果我没有为可选项指定一个值,为什么它的值为nil,而if if catch它呢?
aria-label
答案 0 :(得分:3)
如果我没有为可选项指定一个值,为什么它的值为nil,而if if catch它呢?
如果您将其初始化为nil
,则可能是这样的:
let favoriteSong: String? = nil
或者像这样:
let favoriteSong: String?
favoriteSong = nil
但你也没做过。因此,因为您可能仍然完成了第二个,所以当您尝试使用未初始化的变量时,编译器会出错。
以这种方式思考:如果
let favoriteSong: String?
...自动意味着
let favoriteSong: String? = nil
...然后不可能这样说:
let favoriteSong: String?
favoriteSong = "Rock Around the Clock"
...因为这是常量 - 它无法更改。但我们需要能够说出来!它的法律语法。因此不是什么
let favoriteSong: String?
...含义。你知道吗?
var
的规则不同,因为它可以更改。因此,您可以自动默认初始化为nil
,并可以在以后进行更改。
但对于let
,你只能在初始化时获得一次,所以你不会得到自动默认值,这会阻止你在下一行做自己的初始化;你必须明确初始化。