可选链
2016-02-28 20:44
246 查看
学习可选链的前提我们要对可选类型进行复习,可以参考我之前写的这篇博客Object-C—>Swift之(二)可选类型
个人理解可选链建立在可选类型的基础上,可选类型操作的是某个变量,而可选链操作的是某几个类围绕今天是猴年正月二十一为题材,学习一下这个可选链
[code] class Animalsign { var animal="" var month:Month! init(animal:String) { self.animal=animal } } class Month { var month="" var day:Day! init(month:String) { self.month=month } } class Day{ var day="" init(day:String) { self.day=day } }
上边定义了三个类分别代表年月日,注意看下面的输出代码:
第一份输出代码:常规逻辑
[code] var animal=Animalsign(animal:"猴年") var month=Month(month:"正月") animal.month=month var day=Day(day:"二十一") month.day=day print("\(animal.month!.day.day)")
perfect!完美的输出了二十一
第二份输出代码:见证奇迹的时候
[code] var animal=Animalsign(animal:"猴年") print("\(animal.month!.day.day)")
当我们Com+R运行的时候崩溃了,为什么呢?显然我们的月份和日都没有赋值,而我们就进行输出,就造成了崩溃。是不是很苦恼呀,因此可选链就应运而生了
将上面的访问链中的的强制解析的感叹号(!)换成问号(?)就构成了可选链的访问方式,即使在隐式解析后面也得加上问号(本来按可选类型的隐式是可以省略的,但这里是不行)
即把第二份代码改为
[code] var animal=Animalsign(animal:"猴年") print("\(animal.month?.day?.day)")
此时输出的值为nil,而不会进行崩溃
当可选值为空时可选链即刻失败,然而一般的强制解析将会引发运行时错误。可选链可以处理各类之间的属性、方法、下标等的,在这里我只举了属性,其他的就不一一举例说明了,作为一名优秀的程序员还是要慢慢锻炼有触类旁通的能力。其他的在形式上无外乎加上问号(?),但其中的意义之处要细细品味,原理机制要明白。
相关文章推荐
- 彻底理解js中this的指向
- linux下使用ifconfig和route设置临时ip地址和子网掩码以及默认网关
- Java基础知识 -- 多线程
- Poj 2431 Expedition【stl】
- ThinkPHP实现支付宝接口功能
- QML 开发神秘加成之为网络资源设置本地缓存
- 硬币问题 (贪心)
- javascript插件开发的一些感想和心得
- java面试题1
- HDU 2069 Coin Change (暴力)
- 使用StringBuffer来判断一个数字是否为回文数
- Android Studio开发第四篇版本管理Git
- win10和Ubuntu14.04双系统恢复Linux引导
- Linux磁盘编号
- 出现security ioError 安全沙箱问题
- Android DiskLruCache 源码解析 硬盘缓存的绝佳方案
- 求含有n个元素的集合的幂集
- java JDK1.6 API中文帮助文档、机器学习资料网址、SQL语句学习资料J
- iOS应用与HTTP服务器进行HTTP通信时会用到的API
- 就书籍“构造之法”的问题