可选值
可选值
可选值 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 1 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 1 节课。
简介
您好,
可选变量用于表示变量可能没有值。
如果可选类型的变量有值,就会将该变量解包并使用;否则,它没有值。
Swift 中许多类型都可以使用可选项
它可以类比于 Obj-C 中的空指针。不过,空指针仅对对象类型有效。
Swift 中的可选项不仅可用于对象类型,也可用于结构体、枚举或简单类型。
var optionalVar: String?
// optionalVar is automatically set to nil]
/*
Since we define it as optional without
assigning a value, the variable
automatically takes the value of nil.
*/Swift 中的空值与 Obj-C 中的空值并不相同
Swift 中的空值与 Obj-C 中的空值并不相同。
Obj-C 中的空指针表示对象不存在。Swift 中并不存在这种空指针。Swift 中的空值表示数据不存在,并且它不仅支持对象类型,也支持其他类型。
强制解包
可以使用强制解包方法访问定义为可选项的变量。
使用感叹号运算符可以强制解包代码,但通常不建议这样做。
如果强制解包时引用的数据不存在,就会产生运行时错误。
let convertedNumber : Int? = 123
if convertedNumber != nil {
print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."使用可选绑定访问可选项
使用可选绑定访问可选项
通过 if let代码块,可以将可选变量的值赋给常量或变量,从而访问该值。
与强制解包相比,使用这种方式更加优雅。
var possibleNumber : String? = "10"
if let actualNumber = possibleNumber {
print(actualNumber)
}示例
if let firstNumber = Int("4"), let secondNumber = Int("42"),
firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
/*
If at least one of them is false,
it will not be entered in the if blog.
*/
隐式解包的可选项
隐式解包的可选项
在某些情况下,可选值会在第一阶段被赋值,并且在后续使用时确定不会为空。
在这种情况下,可以不用可选运算符(?),而改用(!)运算符来表示该可选项一定不为空。
这种定义形式称为“隐式解包的可选项”。
隐式解包
隐式解包
最常见的使用场景是类的初始化阶段。
与传统的可选项不同,对于以隐式解包方式声明的变量,我们不需要再对其解包。
let possibleString: String? = "An optional string."
// requires an exclamation mark
let forcedString: String = possibleString!
let assumedString: String! = "An implicitly unwrapped optional string."
// no need for an exclamation mark
let implicitString: String = assumedString 示例
如果将空值赋给此类型的变量,就会产生运行时错误。
让我们来看一个示例
/*
We can use it during optional binding or we can check for nil.
So we use implicitly unwrapped optional
in the same way we use classic optional.
*/
var assumedString: String! = nil
if let definiteString = assumedString {
print(definiteString)
}
// Prints "An implicitly unwrapped optional string."警告
如果变量有可能为空,就不要使用隐式解包的可选项。
空值合并运算符
空值合并运算符
它可以方便地解包可选类型。
让我们通过示例来了解它。
let defaultColorName = "red"
// defaults to nil
var userDefinedColorName: String?
var colorNameToUse = userDefinedColorName ?? defaultColorName
/*
userDefinedColorName is nil,
so colorNameToUse is set to the default of "red"
*/
// a != nil ? a! : b
/*
We can think of it as a shortcut to the above expression.
A checks if a is nil, if a is not nil, it unwrap and eturn,
otherwise it returns the default value, ie b.
*/
恭喜您
恭喜您 🎉
可选值是 Swift 最重要的特性之一。使用可选值可以避免进行空值检查,让代码更加优雅,并使应用程序更加安全。
下一课再见 🥳

常见问题解答
「可选值」课时是免费的吗?
是的 — 「可选值」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 1 节课。
「可选值」这节课中我会学到什么?
可选值 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 1 节。
「可选值」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。