红包(optionals - 可选类型)

移动开发
小明姑姑是个标准的月光族,在小明过生日的前一天才想起来,自己好像又月光了...怎么办?赌一把~ 不管银行卡里能取出来多少钱,都装进红包里塞给小明,嗯,空红包就空红包好了,反正姑姑尽力了,小明你要知道,姑姑其实是爱你的.

[[147754]]

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

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

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

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

故事一:

熊孩子小明要过7岁生日了,一大早就堵在家门口,向来给他过生日的亲戚们要红包,而且表示,不给红包就捣乱.

小明姑姑是个标准的月光族,在小明过生日的前一天才想起来,自己好像又月光了...怎么办?赌一把~ 不管银行卡里能取出来多少钱,都装进红包里塞给小明,嗯,空红包就空红包好了,反正姑姑尽力了,小明你要知道,姑姑其实是爱你的.

知识点

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

b.红包的状态只有两种,一种是没包东西,一种是包了东西

optional类型的数据值也只有两种,一种是nil,一种是非nil

注意:nil在OC中,代表一个空指针,而在Swift中,只能用来表示Optional类型数据的状态 -- 红包是空的

c."不管银行卡里能取出来多少钱,都装进红包里塞给小明"这一句是想说明Optional的常见使用情形:当不确定一个对象有没有值的时候,可以使用Optional类型进行包装 - 如字符串的.toInt()方法(字符串可能根本就不能转换成int类型的数据)

故事二

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

知识点

a.拆红包是指Optional类型数据的强制解析,解析方法为:在optional数据后面使用"!"

b.强制解析之前,一定要确保Optional类型的数据非nil哦!否则程序也会像小明一样,崩溃掉的

故事三

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

知识点

这个故事讲的就是Optional类型数据的可选绑定.

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

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

故事四

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

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

这就是成长啊。

知识点

隐式解析可选类型

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

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

当可选类型被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选类型非常有用。隐式解析可选类型主要被用在 Swift 中类的构造过程中

一个隐式解析可选类型其实就是一个普通的可选类型,但是可以被当做非可选类型来使用,并不需要每次都使用解析来获取可选值。

尾声

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

责任编辑:chenqingxiang 来源: Azen的简书
相关推荐

2015-08-03 17:03:29

swiftoptionals可选型

2024-01-16 07:33:02

SwiftTypeScript可选绑定

2022-08-14 06:59:01

TS 类型编程索引类型

2011-11-03 16:32:57

Dart

2015-02-26 14:45:42

微信支付宝红包

2024-01-17 06:23:35

SwiftTypeScript定义函数

2015-02-27 15:19:36

微信红包算法

2017-01-20 11:14:37

红包

2021-02-09 07:35:16

手机QQ红包APP

2012-03-27 14:23:38

Windows 8IE10

2015-11-12 09:39:28

微信红包实现

2010-01-26 14:53:12

2018-02-05 20:50:38

马云红包春晚

2019-02-03 10:37:53

腾讯视频红包微信

2015-02-26 13:54:01

2022-02-21 10:34:41

微信红包

2019-10-23 15:53:16

JavaScript可选链对象

2009-02-19 13:28:08

远程通讯技术及原理Java

2013-04-19 11:24:19

Ubuntu 13.0GNOME桌面

2009-10-28 13:23:52

VB.NET可选参数
点赞
收藏

51CTO技术栈公众号