4.1 可空类型和nil
- Swift中,nil可用于表示任意类型的数据缺失值的情况,而在Objective-C中,nil表示某个指针所指向的对象不存在。
- Swift的类型系统消除了OC存在无效值的情况,强制使用nil来代表无效值,同时明确规定,只有可空类型允许存储nil值。
4.2 有效性检查、可空绑定和强制拆箱
- 有效性检查:通过if语句来判断一个可空类型是否包含了有效值,需要判断它是否不等于nil。
换言而之,通过if optionalValue != nil,如果YES则可空类型包含有效值,否则没有包含有效值。 - 可以直接对一个可空类型的值进行“==”比较而并不需要事先拆箱。 即“==”操作是对可空类型中存放的值进行比较,而不是对可空本身进行比较。
- 可以通过“可空绑定”将可空类型的值拆箱到常量或者变量中(使用let或者var)。
4.3 可空链
- 可空链允许用单个的步骤访问一连串的可空值,无论是属性、方法还是下标。
- 用“?”代替“!”对可空链的节点进行类似于强制拆箱的操作,每一个节点的可空值都会被检查,只有在值存在的情况下,下一步操作才会继续执行。如果任何一个节点返回nil,则整个可空链返回nil。但是,如果最后一步操作返回的是非可空值,它也会被隐式地包装为可空类型。
4.4 带隐式拆箱的可空
- 要创建一个带隐式拆箱的可空类型,只需要用“!”取代“?”即可。
- 带隐式拆箱的可空总是被假定是有值的,因此在访问它们时,不需要进行强制拆箱。也就是说,不再需要使用“!”来访问它的值。
- 在一旦初始化即可保证有值的对象上使用带隐式拆箱的可空类型。