[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 ...
随机推荐
- 一篇不错的关于分析MVC的文章
1 简介 英文原文:MVC vs. MVP vs. MVVM 三者的目的都是分离关注,使得UI更容易变换(从Winform变为Webform),使得UI更容易进行单元测试. 2 MVC/MVP 2.1 ...
- cocos2dx jsb 在IOS与安卓下的一些不同之处
cocos2dx版本 2.1.4 1:字体大小 cocosbuilder publish后应该注意IOS和安卓目录下的字体文件的规格是否齐全: 2:cc.LabelTTF 在ios下,cc.Label ...
- java11 Guava:谷歌开发的集合库
Guava:谷歌开发的集合库,通过build path->Add External JARs 把guava.jar包加进去. 版本控制工具:.CVS .SVN .git 所以需要下载git客户端 ...
- Why String is immutable in Java ?--reference
String is an immutable class in Java. An immutable class is simply a class whose instances cannot be ...
- iOS开发中常用到的加密方式
1 base64 1.1 简介 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24位数据,再把这24位数据 ...
- Android主题切换方案总结
所谓的主题切换,就是能够根据不同的设定,呈现不同风格的界面给用户,也就是所谓的换肤. 1.将主题包(图片与配置)存到SD卡上(可通过下载或手动放入指定目录),在代码里强制从本地文件创建图片与配置文字大 ...
- Android 开发第三天
今天学习的内容
- Web网站与Web应用程序区别
创建时的目录结构不同. WEB应用程序一般处理程序有命名空间,而网站中的没有.(因为应用程序最后要编译成一个DLL文件,会产生命名冲突,而网站每个页面会编译成每一个的DLL,不会文件内产生全名冲突). ...
- SQL 收缩数据库文件大小
USE WebExam; GO ALTER DATABASE WebExam SET RECOVERY SIMPLE; GO -- 收缩文件到 1 MB. ); GO ALTER DATABASE W ...
- java Spring 生命周期
1.初始化回调 <bean name="userService" class="com.sun.service.UserService" init-met ...