手记

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

虽然都是基于Cocoa和CocoaTouch框架,虽然都属于动态运行模式的静态类型语言,但是Swift和OC两门语言之间的区别还是蛮大的。

所以,希望通过这么一个故事,将Swift中的和OC区别较大的语法、概念和生活中的点点滴滴相互映射,让知识融入生活,用生活融化知识。

哎呀我去,这B装的,我自己都脸红了╮(╯﹏╰)╭

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

故事

熊孩子小明要过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语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。

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

故事

小明长大了,知道让亲戚们当着面把红包打开的行为不太好,也不在意有一些无良亲戚给空红包的行为了。他学会了装糊涂(怎么突然变化这么大-_-|||).虽然在拆到空红包的时候还是会崩溃。

小明知道了谁值得信赖。红包里一定有票票。即使当面拆开也不会让自己崩溃;谁不值得信赖 -- 不值得信赖的人的红包,就不拆了吧。

这就是成长啊。

知识点

隐式解析可选类型

有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。

这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型。

当可选类型被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选类型非常有用。隐式解析可选类型主要被用在 Swift 中类的构造过程中一个隐式解析可选类型其实就是一个普通的可选类型,但是可以被当做非可选类型来使用,并不需要每次都使用解析来获取可选值。

尾声

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

本文知识点部分参考自易百,特此感谢~


作者:Azen(已获授权)

5人推荐
随时随地看视频
慕课网APP

热门评论

测测

查看全部评论