[swift]可选类型
可选类型
《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类型的值,并输出该值。
- var numStr:String = "123"
- var value:Int? = numStr.toInt(); // value必须定义为可选的Int类型,否则无法成功编译
- println(value)
如果将123改成会导致转换失败的值,如a123,那么执行上面的代码后就会输出nil了。
对于一个可选类型的变量或常量,通常在使用之前需要进行判断,例如,下面的代码会对value进行判断,如果确实转换成功(不为nil),则输出一行文本。
- if value != nil
- {
- println("转换成功")
- }
不过每次使用value变量时都进行判断很麻烦,所以,Swift添加了一个用于确定可选类型变量一定有值的感叹号(!)。当对value第一次判断后,如果能确认该变量已经被赋了值,后面就可以直接在value后加感叹号使用该变量了。
- println(value!)
如果在可选类型变量(常量)后面加感叹号,当变量(常量)为nil时,程序会中断,并在终端输出如下的信息。
- fatal error: unexpectedly found nil while unwrapping an Optional value
所以在可选变量(常量)后面加感叹号时,要确保该变量(常量)中一定有值。
现在已经知道了,在引用可选类型变量(常量)时,后面加感叹号是为了在该变量(常量)中没有值(为nil)时抛出运行时异常。那么每次都加感叹号也挺麻烦,所以干脆在定义可选类型变量(常量)时将问号改成感叹号,这样就可以直接引用这些可选类型变量和常量了。
- var numStr:String = "123"
- var value:Int! = numStr.toInt(); // value必须定义为可选的Int类型,否则无法成功编译
- // 即使value后面不加!(当然,加!也没问题),当value为nil时以后抛出异常
- println(value)
注意 在使用可选类型变量(常量)时,如果使用问号(?)来定义,并且单独使用这些变量和常量,后面是可以不加感叹号(!)的。但要让这些变量和常量和其他的值通过操作符进行操作,那就必须要加感叹号了。如下面的代码是合法的。
- var numStr:String = "123"
- var value:Int! = numStr.toInt();
- println(value) // 如果value为nil,则会输出nil
但下面的代码就无法成功编译了。
- var numStr:String = "123"
- var value:Int! = numStr.toInt();
- println(value + 4)// 编译失败,value必须写成value!,或在定义value时使用“!”
[swift]可选类型的更多相关文章
- swift 可选类型笔记
晚上十一点半了,看书累了,原本想睡了的,想了想,还是把刚看的总结一下,把这篇笔记写了吧.广州下雨,真特么的冷..好了,废话不说了,说正题说说Swift可选类型. 先定义一个变量: var string ...
- Swift 可选类型-备
我们先看看如下代码: var n1: Int = 10 n1 = nil //编译错误 let str: String = nil //编译错误 Int和String类型不能接受 ...
- Swift - 可选类型说明
可选类型是Swift的一个特色.它表示一个变量有可能有值,也可能没有值(nil). 声明的方式是“数据类型+问号”. 而当要使用一个可选类型的变量是,要在后面加感叹号“!”. 1 2 3 4 5 6 ...
- swift 可选类型(optional)
可选类型定义 Swift 标准库中定义后缀 ?为可选类型 Optional<Wrapped> 的语法糖,这里语法糖可以简单理解为一种便捷的书写语法.也就是说,下面两个声明是等价的: va ...
- Swift - 可选类型详解
可选类型详解 直接上代码解释 // 类中所有的属性在对象初始化时,必须有初始化值 class Person : NSObject { var name : String? var view : UIV ...
- iOS:swift :可选类型
import UIKit /*: 可选类型 * 可选类型表示变量可以有值, 也可以没有值 * C 和 Objective-C 中并没有可选类型这个概念 * Swift中只有可选类型才可以赋值为nil ...
- Swift可选类型(Optional)之星耀
首先我们先看下Objective-C与Swift语言对于可选nil的不同理解: Objective-C中的nil:表示缺少一个合法的对象,是指向不存在对象的指针,对结构体.枚举等类型不起作用(会返回N ...
- Swift可选类型
可选类型 可选类型的介绍 注意: 可选类型时swift中较理解的一个知识点 暂时先了解,多利用Xcode的提示来使用 随着学习的深入,慢慢理解其中的原理和好处 概念: 在OC开发中,如果一个变量暂停不 ...
- swift 可选类型(optional)--- swift 入门
一.思维导图 二.代码 //这样无形中就会让代码很丑陋 if x != nil && y != nil { print("x或y都不等于空") } print(&q ...
随机推荐
- Linq-表达式常用写法
这里主要是将数据库中的常用操作用LAMBDA表达式重新表示了下,用法不多,但相对较常用,等有时间了还会扩展,并将查询语句及LINQ到时也一并重新整理下:1.select语句:books.Select( ...
- 亿级数据时,内存性能低于IO性能
最近因项目需要,需要生成有0到99999999共1亿的不重复数,于是想着直接将这些数据生成为一个文件就可以了,代码如. private void generate(string savePath) { ...
- hdu1250(Java)大数相加的问题
Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检索
我们的手机通讯录一般都有这样的效果,如下图: OK,这种效果大家都见得多了,基本上所有的android手机通讯录都有这样的效果.那我们今天就来看看这个效果该怎么实现. 一.概述 1.页面功能分析 整体 ...
- 技术QQ群
欢迎加入moss技术交流群. 欢迎加入微信技术交流群.
- win7系统玩游戏不能全屏的解决办法
1.修改注册表中的显示器的参数设置 Win键+R键,打开运行窗口,输入regedit回车,这样就打开了注册表编辑器,然后,定位到以下位置: HKEY_LOCAL_MACHINE\SYSTEM\ ...
- ToString方法的不同格式总结
ToString()参数: 12345.ToString("n"); 生成 12,345.00 12345.ToString("C"); 生成 ¥12,345. ...
- MVC中,查询以异步呈现,分页不用异步的解决方案
MVC中,查询以异步呈现,分页不用异步的解决方案 这种需求,用一个ASPX页面和一个ASCX分部视图就可以解决了,ASPX提供对ASCX的引用,ASCX显示列表信息,ASPX主页面提供查询功能 < ...
- MVC Filter自定义异常(拦截)
// ----------------------------------------------------------------------- // <copyright file=&qu ...
- Golang在视频直播平台的高性能实践
http://toutiao.com/i6256894054273909249/ 熊猫 TV 是一家视频直播平台,先介绍下我们系统运行的环境,下面这 6 大服务只是我们几十个服务中的一部分,由于并发量 ...