• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[swift]可选类型

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

《Swift权威指南》第2章千里之行始于足下——Swift语言基础,本章挑选了Swift语言的最基本特性加以介绍。尽管这些特性只占Swift全部特性的很少一部分,但却是所有的Swift程序都必不可少的。所以,读者通过对本章学习,可以使用Swift编写最基本的程序,并对Swift提供的新特性深深地震撼。本节为大家介绍可选类型。

AD:

 

2.6  可选类型

可选类型也是Swift语言新添加的对象。主要是为了解决对象变量或常量为空的情况。在前面定义的变量和常量都不能为空。里面必须要有值。

Swift中的可选类型则允许变量(常量)中没有值(被设为nil)。要注意的是,Swift中的nil和Objective-C中的nil不一样。前者的nil表示没有值,而后者的nil表示变量值为空。

可选类型需要在类型后面加一个问号(?)。一个典型的例子是String类有一个toInt方法,该方法会将字符串转换为Int类型。不过这里就有一个问题,字符串中可能包含非数字的字符,这时就会转换失败。如果在其他语言中,不添加错误捕捉,可能会抛出异常,而在Swift中,如果转换失败,就直接返回nil。表示没有返回Int类型的值(反正你想加捕捉异常做不到,因为Swift中压根就没有异常捕捉)。这里的toInt方法返回的就是一个可选类型。

下面的代码将numStr中的值转换为Int类型的值,并输出该值。
 

  1. var numStr:String = "123" 
  2. var value:Int? = numStr.toInt();  //  value必须定义为可选的Int类型,否则无法成功编译  
  3. println(value) 

如果将123改成会导致转换失败的值,如a123,那么执行上面的代码后就会输出nil了。

对于一个可选类型的变量或常量,通常在使用之前需要进行判断,例如,下面的代码会对value进行判断,如果确实转换成功(不为nil),则输出一行文本。
 

  1. if value != nil  
  2. {  
  3.     println("转换成功")  

不过每次使用value变量时都进行判断很麻烦,所以,Swift添加了一个用于确定可选类型变量一定有值的感叹号(!)。当对value第一次判断后,如果能确认该变量已经被赋了值,后面就可以直接在value后加感叹号使用该变量了。
 

  1. println(value!) 

如果在可选类型变量(常量)后面加感叹号,当变量(常量)为nil时,程序会中断,并在终端输出如下的信息。
 

  1. fatal error: unexpectedly found nil while unwrapping an Optional value 

所以在可选变量(常量)后面加感叹号时,要确保该变量(常量)中一定有值。

现在已经知道了,在引用可选类型变量(常量)时,后面加感叹号是为了在该变量(常量)中没有值(为nil)时抛出运行时异常。那么每次都加感叹号也挺麻烦,所以干脆在定义可选类型变量(常量)时将问号改成感叹号,这样就可以直接引用这些可选类型变量和常量了。
 

  1. var numStr:String = "123" 
  2. var value:Int! = numStr.toInt();  //  value必须定义为可选的Int类型,否则无法成功编译  
  3. //  即使value后面不加!(当然,加!也没问题),当value为nil时以后抛出异常  
  4. println(value) 

注意 在使用可选类型变量(常量)时,如果使用问号(?)来定义,并且单独使用这些变量和常量,后面是可以不加感叹号(!)的。但要让这些变量和常量和其他的值通过操作符进行操作,那就必须要加感叹号了。如下面的代码是合法的。
 

  1. var numStr:String = "123" 
  2. var value:Int! = numStr.toInt();  
  3. println(value)    //  如果value为nil,则会输出nil 

但下面的代码就无法成功编译了。

 

  1. var numStr:String = "123" 
  2. var value:Int! = numStr.toInt();  
  3. println(value + 4)//  编译失败,value必须写成value!,或在定义value时使用“!” 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift-39-枚举类型关联默认值发布时间:2022-07-13
下一篇:
总结swift2.0到swift3.0语法等变更发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap