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 ?? b
a
是可选项。
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 许可协议,转载请注明出处。
相关文章