虽然都是基于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语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。
小明长大了,知道让亲戚们当着面把红包打开的行为不太好,也不在意有一些无良亲戚给空红包的行为了.他学会了装糊涂(怎么突然变化这么大-_-|||).虽然在拆到空红包的时候还是会崩溃。
小明知道了谁值得信赖,红包里一定有票票,即使当面拆开也不会让自己崩溃;谁不值得信赖 -- 不值得信赖的人的红包,就不拆了吧。
这就是成长啊。
- 隐式解析可选类型
有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。
这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型。
当可选类型被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选类型非常有用。隐式解析可选类型主要被用在 Swift 中类的构造过程中
一个隐式解析可选类型其实就是一个普通的可选类型,但是可以被当做非可选类型来使用,并不需要每次都使用解析来获取可选值。
尾声
嗯,小明的故事结束了!以后一定不要给自己的小辈包空红包哦!否则他长大了,就不会隐式解析你了哦!哈哈
本文知识点部分参考自易百特此感谢~