听故事学Swift系列 - 小明与红包(optionals - 可选类型)

移动开发
虽然都是基于Cocoa和CocoaTouch框架,虽然都属于动态运行模式的静态类型语言,但是Swift和OC两门语言之间的区别还是蛮大的. 所以,希望通过这么一个系列,以讲故事的方式,将Swift中的和OC区别较大的语法,概念,和生活中的点点滴滴相互映射,让知识融入生活,用生活融化知识.

[[143647]]

熊孩子小明&他的月光族姑姑

故事

熊孩子小明要过7岁生日了,一大早就堵在家门口,向来给他过生日的亲戚们要红包,而且表示,不给红包就捣乱.
小明姑姑是个标准的月光族,在小明过生日的前一天才想起来,自己好像又月光了...怎么办?赌一把~ 不管银行卡里能取出来多少钱,都装进红包里塞给小明,嗯,空红包就空红包好了,反正姑姑尽力了,小明你要知道,姑姑其实是爱你的.

知识点

  1. optional类型的数据就像是一个红包,不管字符串还是结构体,都可以包进红包里.

  2. 红包的状态只有两种,一种是没包东西,一种是包了东西
    optional类型的数据值也只有两种,一种是nil,一种是非nil
    注意:nil在OC中,代表一个空指针,而在Swift中,只能用来表示Optional类型数据的状态 -- 红包是空的
  3. "不管银行卡里能取出来多少钱,都装进红包里塞给小明"这一句是想说明Optional的常见使用情形:当不确定一个对象有没有值的时候,可以使用Optional类型进行包装 - 如字符串的.toInt()方法(字符串可能根本就不能转换成int类型的数据)

故事

吃完蛋糕送走大家,小明兴高采烈地开始拆红包.哇!这个红包里包了好多毛爷爷!哇!这个红包里居然包了美金!哇!这个红包居然是空的!!!小明哭了,哭的好伤心,整个人都崩溃了.

知识点

  1. 拆红包是指Optional类型数据的强制解析,解析方法为:在optional数据后面使用"!"
  2. 强制解析之前,一定要确保Optional类型的数据非nil哦!否则程序也会像小明一样,崩溃掉的

故事

转眼间小明要过8岁生日了.回想起7岁时收到的空红包,小明早早准备了一个透明塑料袋,收红包的时候,要让大家当面把红包里面包的东西,先放进塑料袋里,然后才能进屋吃饭.如果没有东西装进塑料袋里,小明就撒泼打滚吐口水(好一个熊孩子-_-|||)

知识点

这个故事讲的就是Optional类型数据的可选绑定.
通过可选绑定(optional binding)可以判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。

  1. if let 塑料袋里的钱 = 红包里的钱() { 
  2.     小明.高高兴兴亲一个方法 
  3. else { 
  4.     小明.撒泼打滚吐口水方法 

故事

小明长大了,知道让亲戚们当着面把红包打开的行为不太好,也不在意有一些无良亲戚给空红包的行为了.他学会了装糊涂(怎么突然变化这么大-_-|||).虽然在拆到空红包的时候还是会崩溃.
小明知道了谁值得信赖,红包里一定有票票,即使当面拆开也不会让自己崩溃;谁不值得信赖 -- 不值得信赖的人的红包,就不拆了吧.
这就是成长啊.

知识点

隐式解析可选类型
有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。
这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型。
当可选类型被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选类型非常有用。隐式解析可选类型主要被用在 Swift 中类的构造过程中
一个隐式解析可选类型其实就是一个普通的可选类型,但是可以被当做非可选类型来使用,并不需要每次都使用解析来获取可选值。

尾声

嗯,小明的故事结束了!以后一定不要给自己的小辈包空红包哦!否则他长大了,就不会隐式解析你了哦!哈哈

责任编辑:倪明 来源: 简书
相关推荐

2015-09-02 10:33:54

红包类型optionals

2024-01-16 07:33:02

SwiftTypeScript可选绑定

2015-08-05 09:45:25

IOS故事多线程

2009-09-02 17:51:36

.NET委托

2024-01-17 06:23:35

SwiftTypeScript定义函数

2024-01-18 07:09:10

2018-07-03 15:20:36

Promise函数借钱

2014-06-06 09:13:28

SwiftSwift编程

2010-08-04 15:22:42

VMwareNFS

2022-08-14 06:59:01

TS 类型编程索引类型

2011-11-03 16:32:57

Dart

2022-05-11 09:01:54

Swift类型系统幻象类型

2022-03-31 09:01:10

Swift类型擦除类型安全性

2024-01-18 00:16:07

2017-01-06 15:06:08

京东

2013-10-09 09:33:10

开源开源软件

2009-12-14 18:32:42

Linux桌面

2009-06-02 14:28:14

品牌故事APC

2014-09-24 11:15:05

Objective-CSwift

2022-05-25 09:15:01

Swift 5.6占位符
点赞
收藏

51CTO技术栈公众号