- 可选项,一般也叫可选类型,它允许将值设置为 nil
- 在类型名称后面加个 ? 来定义一个可选项
var name: String? = "Swift"
name = nil
var age: Int? // 默认就是 nil
age = 10
age = nil
如果是可选项,它默认就有个 nil 值
var array = [1, 15, 40,29]
func get(_ index: Int) -> Int? {
if index < 0 || index >= array.count {
return nil
}
return array[index]
}
print(get(1)) // 15
print(get(-1)) // nil
print(get(4)) // nil
-
强制解包(Forced Unwrapping)
- 可选项是对其他类型的一层包装,可以将它理解为一个盒子
- 如果为 nil,那么它是个空盒子
- 如果不为 nil,那么盒子里装的是:被包装类型的数据
- 如果要从可选项中取出被包装的数据(将盒子里装的东西取出来),需要使用 ! 进行强制解包
var age: Int? = 10
var ageInt = age!
ageInt += 10
- 如果对值为 nil 的可选项(空盒子)进行强制解包,将会产生运行时错误
var age: Int?
var ageInt = age!
Fatal error: Unexpectedly found nil while unwrapping an Optional value
let number = Int("123")
if number != nil {
print("字符串转换整数成功:\(number!)")
}else {
print("字符串转换整数失败")
}
// 字符串转换整数成功: 123
if let number = Int("123") {
print("字符串转换整数成功:\(number)")
// number是强制解包之后的Int值
// number作用域仅限于这个大括号
} else {
print("字符串转换整数失败")
}
// 字符串转换整数成功:123
enum Season : Int {
case spring = 1, summer, autumn, winter
}
if let season = Season(rawValue