请原谅这个基本问题。
我将一个常量声明为可选字符串,然后我使用 if let... 来解开它。
我收到以下错误:
初始化之前使用的常量“favoriteSong”
如果我没有为可选值赋值,为什么它的值不是 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")
}
Run Code Online (Sandbox Code Playgroud)
\n\n\n如果我没有为可选值赋值,为什么它的值不是 nil 并且 if let 捕获它?
\n
如果您将其初始化为nil,则可以这样:
let favoriteSong: String? = nil\nRun Code Online (Sandbox Code Playgroud)\n\n或者像这样:
\n\nlet favoriteSong: String?\nfavoriteSong = nil\nRun Code Online (Sandbox Code Playgroud)\n\n但你也没有这么做。因此,由于您可能仍然执行了第二个操作,因此当您尝试使用未初始化的变量时,编译器会给出错误。
\n\n这样想:如果
\n\n let favoriteSong: String?\nRun Code Online (Sandbox Code Playgroud)\n\n...自动意味着
\n\n let favoriteSong: String? = nil\nRun Code Online (Sandbox Code Playgroud)\n\n……那么就不可能这样说:
\n\nlet favoriteSong: String?\nfavoriteSong = "Rock Around the Clock"\nRun Code Online (Sandbox Code Playgroud)\n\n...因为这是一个常数\xe2\x80\x94 它无法更改。但我们需要能够这么说!这是合法的语法。因此,这不是什么
\n\n let favoriteSong: String?\nRun Code Online (Sandbox Code Playgroud)\n\n...方法。你有看到?
\n\n的规则var是不同的,因为它是可变的。因此,您将获得自动默认初始化,nil并且可以稍后更改它。
但是对于let,您只能在初始化时获得一次机会,因此您不会获得自动默认值,这会阻止您在下一行中进行自己的初始化;你必须显式初始化。
| 归档时间: |
|
| 查看次数: |
834 次 |
| 最近记录: |