首页 > 学院 > 开发设计 > 正文

关于swift的可选值(optional)

2019-11-14 19:37:56
字体:
来源:转载
供稿:网友

关于可选值optional

 

不同于OC,swift引入了一个新的概念——可选值,了解这个optional,对于swift的学习至关重要

概念定义:可以有值也可以没有值(nil)的一个类型。换句话说,它有两个状态:有值,没有值(nil)

按我的理解,可选值是带有布尔类型加持的普通类型

如何定义一个可选值呢?

上面的代码简单定义了一个叫做optionalValue的可选值。

和普通的变量定义没有太大区别,唯一不同在于,这里多了一个问号,?是对普通值的封包 要加在类型后面,也就是说,在变量或者常量的所属类型后面加一个问号就可以将其定义为一个optional

这里我给它赋值80,如果不赋值,那么它默认将是nil

 

可选值的强制解包forced unwrapping

 

通过在类型后面加一个问号,可以将这个变量或常量变为可选值,那么反过来要怎么做呢?

swift提供了解包操作,只需在可选值后面加一个叹号,就可以将可选值强制解包

据说,带有强制性质的事,都不是什么好事,于是问题来了……

上面的代码中,我创建了一个optional变量,没有赋值,那默认就是nil

在第二行当我试图将这个optional解包时,出现了错误。

原来,nil的可选值解包时候会出现错误,苹果的官方文档也强调,如果你不100%确信这个可选值有值,那么不要用强制解包

 

可选值绑定Optional Binding

 

既然强制解包在可选值为nil的时候会报错,那怎么将可选值里的数据读取出来呢?

swift提供了一个更加安全的方法——可选值绑定Optional Binding

上面是官方文档提供的用法,不太明确,下面是代码演示:

上面的代码中,我先定义了一个可选值字符串,赋值为90,然后用optional binding创建一个叫做tempValue的常量,if语句会根据tempValue是否从optionalValue中获取了值来决定是否要来打印出这个值,playground的结果显示这个tempValue被赋予了“90”

而当我不给可选值赋值,让它默认为nil的时候,打印tempValue也没有报错,if判断tempValue没有从optionValue中获取值,就什么也没有做,当然也不会报错。

这就相当于给可选值找了一个中间人,间接判断并读取可选值中的内容,在不确定当前可选值时否为nil的情况下,苹果官方推荐用这个方式判断可选值是否为nil并尝试获取可选值的数据。

 

更多内容请访问 http://www.VEVb.com/updating/ 转载请注明出处

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表