type
status
date
slug
summary
tags
category
icon
password
example-row
example-row
使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示两种可能:
- 有值,解析可选类型访问这个值
- 没有值
以下两种声明是相等的:
Int类型有一种构造器,将String值转换为一个Int值。因为该构造器可能会失败,所以他返回一个可选类型(optional)Int,而不是Int类型。nil
给可选变量赋值为
nil表示它没有值,nil不能用于非可选的常量和变量,如果声明一个可选常量或变量但是没有赋值,他们会自动被设置为nil。Swift中的nil和OC中的nil并不一样。在OC中是一个指向不存在对象的指针。在Swift中,nil不是指针——它是一个确定的值,用来表示值的缺失。任何类型的可选状态都可以被设置为nil,不只是对象类型。强制解析
在可选的名字后面加一个
!来获取值。 !表示"这个可选类型有值,可以直接使用",这被称为可选值的强制解析。自动解析
在声明可选变量时,使用
!替换?,这样可选变量在使用时不需要再加!来获取值,这被称为自动解析。可选解包比强制解析就优雅些,它先做是否有值判断。若没有值就返回
nil,否则就返回真实值。这样的好处是程序不会崩溃。可选解包
可选解包比强制解析就优雅些,它先做是否有值判断。若没有值就返回
nil,否则就返回真实值。这样的好处是程序不会崩溃。if - let语句会检查可选值是否为 nil,如果不是nil,便会解包可选值。
-
guard let刚好是if not let的意思,可选解包为nil的情况,走guard的else部分,一般直接返回,而正常流程继续执行。其实就是异常流程就直接返回,正常流程继续执行。
可选值绑定
使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。在可选类型中,我们已经使用了可选值绑定。
好处就是判断可选类型是否有值。
空合并运算符
合并方式:
a ?? ba是可选项。
b是可选项 或者 不是可选项。
b跟a的存储类型必须相同。
- 如果
a不为nil,就返回a。
- 如果
a为nil,就返回b。
- 如果
b不是可选项,返回a时会自动解包。
说明:
- 只有当
b不是可选项时,返回a时才会自动解包。
- 如果
b是可选项,返回a或b的时候并不会自动解包。
a和b的存储类型一定要一样。
多重可选项
嵌套使用可选项
说明:
- 可选项可以包装数据类型,也可以包装可选项。
- 这里
num3使用??也是多重可选项,因此先对10进行包装,再将其包装到num3上。
- 如果是
nil,可选项不管几层包装都是空的。
Object-C中nil与Swift中的nil的区别
OC:nil是一个指向不存在对象的指针,只有对象类型才能赋值为nil。
Swift:nil不是指针,是一个确定的值。任何类型的可选状态都可设置为nil,不只是对象类型。
OC:nil只对类(class)有用。
Swift:可选类型对所有的类型都可用且更安全。
OC:对nil对象发送消息是安全的,不会崩溃。
Swift:可通过可选链实现。
总结:
- 声明变量的时候,若存在可能为有值或者没有值的情况,可以考虑使用可选类型。
- 可选类型的使用需注意:要解包才能使用。
- 对于解包,建议使用可选解包,这样不会导致程序崩溃。
- 作者:黄x黄
- 链接:https://hxhowl.site/article/swift002
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章