- Swift 的可选(
Optional)类型,用于处理值缺失的情况。 Optional是一个含有两种情况的枚举,None和Some(T),用来表示可能有或可能没有值。- Swfit语言定义后缀
?作为命名类型Optional的简写,换句话说,以下两种声明是相等的:
var optionalInteger: Int?
var optionalInteger: Optional<Int>
- 任何类型都可以明确声明为,或者隐式转换可选类型。
- 当声明一个可选类型的时候,要确保用括号给
?操作符一个合适的范围。例如,声明可选整数数组,应该写成(Int[])?;写成Int[]?会报错。 - 当你声明一个可选变量或者可选属性的时候,没有提供初始值,它的值会默认为
nil。 - 可选类型类似于
Objective-C中指针的nil,但是nil只对类(class)有用,而可选类型对所有的类型都可用,并且更安全。
强制解析(forced unwrapping)
- 如果一个可选类型的实例包含一个值,可以用后缀操作符
!来访问这个值。 - 使用强制解析获取一个不存在的可选值会导致运行时错误。
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
// 强制解析
print( myString! )
}else{
print("myString 值为 nil")
}
以上程序执行结果为:
Hello, Swift!
自动解析
- 在声明可选变量时使用感叹号
!替换问号? - 这样可选变量在使用时就不需要再加一个感叹号
!来获取值,它会自动解析。
var myString : String!
myString = "Hello, Swift!"
if myString != nil {
print(myString)
} else {
print("myString 值为 nil")
}
以上程序执行结果为:
Hello, Swift!
可选绑定
使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在 if 和 while 语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。
var myString : String?
myString = "hello world"
if let yourString = myString {
print("你的字符串值为 - \(yourString)")
}else{
print("你的字符串没有值")
}
以上程序执行结果为:
你的字符串值为 - hello world!