请原谅这个基本问题。
我声明一个常量是一个可选字符串,然后我去解包它使用如果让....
我收到以下错误:
初始化前使用的常量"收藏夹歌曲">
如果我不为可选赋值,为什么它的值不为 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
,你只有一次初始化的机会,所以你不会得到自动默认值,这会阻止你在下一行进行自己的初始化;你必须显式初始化。