为什么必须初始化声明为可选的常量?

时间:2018-03-19 19:24:20

标签: swift

原谅这个基本问题。

我声明一个常量是一个可选字符串,然后我去打开它使用if if ....

我收到以下错误:

  

Constant' favoriteSong'在初始化之前使用

如果我没有为可选项指定一个值,为什么它的值为nil,而if if catch它呢?

aria-label

1 个答案:

答案 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,你只能在初始化时获得一次,所以你不会得到自动默认值,这会阻止你在下一行做自己的初始化;你必须明确初始化。