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

  • 本文关键字:常量 初始化 声明 swift
  • 更新时间 :
  • 英文 :


请原谅这个基本问题。

我声明一个常量是一个可选字符串,然后我去解包它使用如果让....

我收到以下错误:

初始化前使用的常量"收藏夹歌曲">

如果我不为可选赋值,为什么它的值不为 nil,而 if let 会捕获它?

let favoriteSong: String?
if let favoriteSong = favoriteSong {
print("My favorite song is (favoriteSong)")
} else {
print("I don't have a favorite song")
}

如果我不为可选赋值,为什么它的值不为 nil,而 if let 会捕获它?

如果您将其初始化为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,你只有一次初始化的机会,所以你不会得到自动默认值,这会阻止你在下一行进行自己的初始化;你必须显式初始化。

最新更新