Swift是否允许声明一个没有初始值的变量?

时间:2018-03-17 13:17:19

标签: swift compiler-errors initialization

在我看到这个例子之前,我以为我知道如何声明变量。

在示例中,声明了一个常量。

let timeOfDay: String

我认为你不能在没有初始化的情况下声明变量/常量,除非你将它声明为可选项?

当然,当我去打印常数时,程序会爆炸。编译器是如何允许的?我把它输入了一个游乐场。

一个完整的例子:

let hourOfDay = 12
let timeOfDay: String
if hourOfDay < 6 {
    timeOfDay = "Early morning"
} else if hourOfDay < 12 {
    timeOfDay = "Morning"
} else if hourOfDay < 17 {
    timeOfDay = "Afternoon"
} else if hourOfDay < 20 {
    timeOfDay = "Evening"
} else if hourOfDay < 24 {
    timeOfDay = "Late evening"
} else {
    timeOfDay = "INVALID HOUR!"
}
print(timeOfDay)

3 个答案:

答案 0 :(得分:2)

编译器非常聪明,可以确定在导致timeOfDay的第一次读取访问的每个可能的代码路径上,它实际上只被初始化一次。尝试将其中一项作业留作实验。

答案 1 :(得分:1)

编译器让你声明一个没有值的let变量,但它希望你稍后为它设置一个值。可能无法输入示例中的任何if语句,因此编译器知道您正在尝试读取可能不存在的值。您可以尝试使用简单的if else语句并尝试运行,只需检查:D

答案 2 :(得分:0)

是的,我们可以在Swift中声明一个没有初始值的常量。但是我们需要稍后分配一个值,以便我们可以使用该Constant,否则会出现编译错误。同样重要的是要注意,尽管我们可以在“变量”中多次更改值,但可以将值分配给“仅常量”一次。

在上面给定的示例中,if-else语句只能将一个值分配给Constant timeOfDay一次。之后,我们将无法分配新值,甚至无法创建新的if-else语句来更改timeOfDay的值。