目录
Swift底层原理探索----可选项
可选项(Optional)
- 可选项,一般也叫做可选类型,它允许将值设置为nil
- 在类型名称后面加个
问号?
来定义一个可选项
var name: String = "Jack"
name = nil
var age: Int?
age = 10
age = nil
C语言中,变量声明之后,会自动被赋予初始值,Swift则不会这样,但是Swift的Optional则会有默认的初始值nil
func test() {
var age: Int -->没有初始值,必须赋值之后才能使用
var weight: Double? --> 默认初始值为nil, 等价于 var weight: Double? = nil
}
使用场景,有可能需要使用nil的地方
var array = [1,13,45,33]
func get(_ index: Int) -> Int? {
if index < 0 || index >= array.count {
return nil
}
return array[index]
}
print(get(1))// Optional(15)
print(get(-1))// nil
print(get(5)) // nil
强制解包(Forced Unwrapping)
- 可选项是对其他类型的一层包装,可以将它理解成一个盒子
- 如果为
nil
,那么它是个空盒子 - 如果不为
nil
,那么盒子里装的是:被包装类型的数据
- 如果为
var age: Int? // 默认就是nil
age = 10
age = nil
- 如果要从可选项中取出被包装的数据(将盒子里装的东西取出来),需要使用
感叹号!
进行强制解包
var speed: Int? = 10
var speedInt: Int = speed!
speedInt += 10
- 如果对值为
nil
的可选项(空盒子)进行强制解包,将会产生运行时错误
var age: Int?
age!
运行报错:Fatal error: Unexpectedly found nil while unwrapping an Optional value: file Optional.xcplaygroundpage
判断可选项是否包含值
let number = Int("123")
if number != nil {
print("字符串转换整数成功:\(number!)")
} else {
print("字符串转换整数失败")
}
可选项绑定(Optional Binding)
- 可以使用
可选项绑定
来判断选项是否包含值
如果包含就自动解包,把值赋给一个临时的常量(let
)或者变量(var
),并返回true
,否则返回false
if let number = Int("123") {
print("字符串转换整数成功: \(number)")
-->number是强制解包之后的Int值
-->number的作用仅限于这个大括号
} else {
print("字符串转换整数失败")
}
<