Swift 可选(Optionals)类型的定义
Swift 的可选(Optional)类型,用于处理值缺失的情况。可选表示"有值 “或者"没有值”。
Swfit语言定义后缀?作为命名类型Optional的简写
var str: String? //
let num: Int? = 10 // 申明可选Int类型的常量,初始值为10
可选(Optional) 的拆包
- 显式拆包
Optional 类型的值不能被直接使用,当需要用时要显示拆包,以表明我知道这个 Optional 是一定有值的:
var str: String? = "Hello World!"
print(str!)//Hello World!
之所以要拆包使用,是因为 Optional 类型其实是一个枚举:
enum Optional<T> : Reflectable, NilLiteralConvertible {
case None
case Some(T)
init()
init(_ some: T)
/// Haskell's fmap, which was mis-named
func map<U>(f: (T) -> U) -> U?
func getMirror() -> MirrorType
static func convertFromNilLiteral() -> T?
}
- 隐式拆包
除了显示拆包之外, Optional 还提供了隐式拆包,通过在声明时的数据类型后面加一个感叹号(!)来实现
var str: String! = "Hello World!"
print(str) //Hello World!
- 空运算符
可以用来判断变量或常量是否为nil
// 空合运算符:a ?? b 判断a是否为nil,若a不为nil对a解包,否则返回b的值
var num: Int? // 申明可选Int类型的变量num,初始值为nil
num ?? 0 // 因为num为nil,则返回0
// ?? 即为以下if else的缩写
func testOption() -> Int {
let num: Int? = 1
if num == nil {
return 0
} else {
return num!
}
}