从零开始的SWIFT开发记录之可选型-Optional & Guard

2,728 阅读3分钟

注意

任何没有被定义为可选性的变量,都不可置为nil,否则系统会报错。

可选型在声明未被赋值时,默认是nil,即使是Int类型也是nil,而不是0,非可选型在声明没有赋值时,是不可以使用的。

optional是一种类型,并不能直接做一些运算之类的操作,如果要,那就必须先解包,把数据取出来使用。

可选项绑定

截屏2022-05-24 14.31.02.png

通过解包赋值成功与否来判断解包是否成功。

截屏2022-05-24 14.49.51.png

可选性绑定不能用&&来筛选条件,要用逗号

空合并运算符

截屏2022-05-24 15.19.34.png

b决定了返回的类型。

截屏2022-05-24 15.23.56.png

先看最右边,决定了返回的类型,是3那就是解包int类型,在看前面取哪个值。

截屏2022-05-24 15.29.01.png

Guard

一个简单地关于登录判断的例子分析

截屏2022-05-24 16.38.23.png

因为传入的是字典,在拿到字典里的值得时候,这个值是可选项,要做可选项绑定,因为这个tmp值只作用在当前if判断里面,所以需要在外层拿一个变量去接收。

如果用guard的话呢??

截屏2022-05-24 16.38.09.png

guard的意思是,当前判断不成立,才会走大括号里面的内容,并且此时声明的值可以在整个作用域里使用,注意的就是,大括号里面必须返回return或者break或者continue,退出当前作用域,类似switch,让他跳出语句。

隐式解包

在某些情况下,可选项的值在一开始就已经设置了,那么他就会一直拥有这个值,那么为了避免重复的检查,可以通过隐式解包的方式拿到他的值。要注意的是,不能是nil,会报错!

截屏2022-05-24 16.55.26.png

在声明一个可选型的时候,通过感叹号直接解包,后续用的时候可以直接赋值,这句话的意思相当于如果你没有在类型后加感叹号,那么在用的时候,let num2:Int = num1!这样才可以,因为里面是可选型,拿值得话必须解包才可以。但是在开发中尽量不要这么声明,因为可选型是可以被重新赋值的,万一又变成了nil就崩了。一般还是带问号的声明。

字符串插值

截屏2022-05-24 17.27.37.png

第一种就是强解包,第二种就是通过swift的方法描述将可选项变成字符串描述值,第三种就是用空合并运算符。

多重可选项

截屏2022-05-24 17.33.23.png

第一种就是正常的一个盒子装了一个int类型的值,这个num1就是Int?类型,第二个类型是Int??,这也是个盒子,只不过里面装的是Int?类型,所以可以直接复制num1,第三种,跟第一种情况一样,就是直接声明一个Int??类型,只不过盒子里装的是10,2和3的效果是一样的。

可以通过lldb指令去看对应变量,具体fr v -R + 变量,如果num1是nil,打印出如果第一个就是none,那么后面的基本可以不用看了。 截屏2022-05-24 18.15.44.png