主题
08. Optional 入门 练习答案
对应章节:
如果你想一边看答案一边运行代码,也可以打开对应示例工程:
demos/projects/08-optional-basics
练习 1
题目:
- 声明一个
String?类型的变量
参考答案:
swift
var text: String?说明:
String?表示这个变量可能有字符串值,也可能没有值
练习 2
题目:
- 先给它赋值为一个字符串,再改成
nil
参考答案:
swift
var text: String?
text = "Hello"
print(text as Any)
text = nil
print(text as Any)参考输出:
text
Optional("Hello")
nil说明:
- 第一次赋值后,
text里面真的保存了一个字符串 - 改成
nil后,表示它当前没有值
练习 3
题目:
- 写一个
Int("123")的例子,并用if let取值
参考答案:
swift
let number = Int("123")
if let value = number {
print("转换成功,值是:", value)
}参考输出:
text
转换成功,值是: 123说明:
Int("123")的结果是Int?- 因为字符串转整数这件事可能成功,也可能失败
- 这里刚好成功了,所以
if let里的代码会执行
练习 4
题目:
- 再写一个
Int("Hello")的例子,观察为什么不能直接得到整数
参考答案:
swift
let number = Int("Hello")
print(number as Any)
if let value = number {
print("转换成功,值是:", value)
}参考输出:
text
nil说明:
"Hello"不是一个可以转换成整数的字符串- 所以
Int("Hello")的结果是nil - 因为没有成功取到值,所以
if let代码块不会执行
练习 5
题目:
- 尝试自己读懂下面这行代码的意思
swift
if let text = readLine() {
print(text)
}参考答案:
你可以先把它读成:
- 如果
readLine()真的读到了一行文本 - 就把这行文本取出来,命名为
text - 然后执行
print(text)
也可以拆开理解成:
readLine()的结果是String?if let text = ...会先检查这里面有没有值- 如果有值,就把里面真正的字符串取出来,命名为
text - 这时
text已经不是String?,而是普通的String - 如果没有值,这个代码块就会被直接跳过
一组可直接运行的综合答案
swift
import Foundation
var text: String?
print("初始值:", text as Any)
text = "Hello"
print("赋值后:", text as Any)
text = nil
print("改回 nil 后:", text as Any)
let number1 = Int("123")
let number2 = Int("Hello")
if let value = number1 {
print("number1 转换成功,值是:", value)
}
if let value = number2 {
print("number2 转换成功,值是:", value)
}