问号? 是Optional, 意思是对类型进行了非空处理, 包含两个类型None跟Some()
问号?
a.声明时添加?,告诉编译器这个是Optional的,如果声明时没有手动初始化,就自动初始化为nil
b.在对变量值操作前添加?,判断如果变量时nil,则不响应后面的方法。
叹号!
.声明时添加!,告诉编译器这个是Optional的,并且之后对该变量操作的时候,都隐式的在操作前添加!
b.在对变量操作前添加!,表示默认为非nil,直接解包进行处理
总结
C 和 Objective-C 中并没有可选类型这个概念。最接近的是 Objective-C 中的一个特性,一个方法要不返回一个对象要不返回nil,nil表示“缺少一个合法的对象”。然而,这只对对象起作用——对于结构体,基本的 C 类型或者枚举类型不起作用。对于这些类型,Objective-C 方法一般会返回一个特殊值(比如NSNotFound)来暗示值缺失。这种方法假设方法的调用者知道并记得对特殊值进行判断。然而,Swift 的可选类型可以让你暗示任意类型的值缺失,并不需要一个特殊值
通俗的概括就是
1.C语言根本没有可选类型这么一说
2.OC中的nil是指向不存在对象即空对象的指针,不可以赋值给基本数据类型
3.Swift中nil不是指针,他就是一个明确的值,表示值的缺失,任何类型都可以,不只是对象
PS: 日积月累, 天天进步!
最近没怎么更新简书, 公司事情这段比较多, 有点忙! 最大的原因是自己惰性犯了 。定的计划, 没有按时完成,但是做的比较好的是每周仍然坚持跑步运动四次。
--END--