关于swift的可选值(optional)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

关于可选值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.cnblogs.com/updating/ 转载请注明出处

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航