Optional:
- 概念: 用于表示一种值可能为空的对象类型。一个 Optional 对象表示了两种可能性:要么对象有值,你可以通过
unwrap
去获取到这个值;要么对象里面没有任何东西 unwrap
(解包):在对象后加 “?” 或 “!” 称为将对象 “unwrap”,可以获取到 Optional 里面的关联值
- 概念: 用于表示一种值可能为空的对象类型。一个 Optional 对象表示了两种可能性:要么对象有值,你可以通过
nil
区别- Swift:在 Swift 中,nil 不是一个指针,它是一个带有特定类型的表示数值缺失的值,任何类型的 Optional 都可以设置为 nil 而不只是对象类型。
var str: String?
// str == nil - Objective-C:nil 是指向一个不存在对象的指针
- Swift:在 Swift 中,nil 不是一个指针,它是一个带有特定类型的表示数值缺失的值,任何类型的 Optional 都可以设置为 nil 而不只是对象类型。
强制解包:
- 使用!进行解包:一旦你确定可选中包含值,可以使用后缀操作符!来强制拆包(force unwrap)访问这个值,感叹号的意思就是说“我知道这个可选项里边有值,展开吧。”这就是所谓的可选值的强制展开。 !!!:使用! 来获取一个不存在的可选值会导致carsh,在使用!强制展开之前必须确保可选项中包含一个非 nil 的值。
小结:
- ?
- 声明时添加?,告诉编译器这个是Optional的,如果声明时没有手动初始化,就自动初始化为nil
- 在对变量值操作前添加?,判断如果变量时nil,则不响应后面的方法
- 声明时添加?,告诉编译器这个是Optional的,如果声明时没有手动初始化,就自动初始化为nil
- !
* 声明时添加!,告诉编译器这个不是Optional的,并且之后对该变量操作的时候,都隐式的在操作前添加!
- 在对变量操作前添加!,表示默认为非nil,直接解包进行处理
- ?