Swift 可選(Optionals)類型Swift 的可選(Optional)類型相寇,用于處理值缺失的情況慰于。可選表示"那兒有一個值唤衫,并且它等于 x "或者"那兒沒有值"婆赠。Swfit語言定義后綴?作為命名類型Optional的簡寫佳励,換句話說休里,以下兩種聲明是相等的:var optionalInteger: Int?var optionalInteger: Optional在這兩種情況下,變量 optionalInteger 都是可選整數(shù)類型赃承。注意妙黍,在類型和 ?之間沒有空格。
Optional 是一個含有兩種情況的枚舉瞧剖,None 和 Some(T)拭嫁,用來表示可能有或可能沒有值。任何類型都可以明確聲明為(或者隱式轉(zhuǎn)換)可選類型抓于。當(dāng)聲明一個可選類型的時候做粤,要確保用括號給 ? 操作符一個合適的范圍。例如捉撮,聲明可選整數(shù)數(shù)組怕品,應(yīng)該寫成 (Int[])? 寫成 Int[]? 會報(bào)錯。
當(dāng)你聲明一個可選變量或者可選屬性的時候沒有提供初始值呕缭,它的值會默認(rèn)為 nil堵泽。
可選項(xiàng)遵照 LogicValue 協(xié)議修己,因此可以出現(xiàn)在布爾環(huán)境中恢总。在這種情況下,如果可選類型T?包含類型為T的任何值(也就是說它的值是 Optional.Some(T) )睬愤,這個可選類型等于 true片仿,反之為 false。
如果一個可選類型的實(shí)例包含一個值尤辱,你可以用后綴操作符 砂豌!來訪問這個值厢岂,如下所示:
optionalInteger = 42
optionalInteger! // 42
使用操作符!去獲取值為nil的可選變量會有運(yùn)行時錯誤阳距。
你可以用可選鏈接和可選綁定選擇性執(zhí)行可選表達(dá)式上的操作塔粒。如果值為nil,任何操作都不會執(zhí)行筐摘,也不會有運(yùn)行報(bào)錯卒茬。
讓我們來詳細(xì)看下以下實(shí)例來了解 Swift 中可選類型的應(yīng)用:
import Cocoa
var myString:String? = nil
if myString != nil {
print(myString)
}else{
print("字符串為 nil")
}
以上程序執(zhí)行結(jié)果為:
字符串為 nil
可選類型類似于Objective-C中指針的nil值,但是nil只對類(class)有用咖熟,而可選類型對所有的類型都可用圃酵,并且更安全。
強(qiáng)制解析
當(dāng)你確定可選類型確實(shí)包含值之后馍管,你可以在可選的名字后面加一個感嘆號(!)來獲取值郭赐。這個感嘆號表示"我知道這個可選有值,請使用它确沸。"這被稱為可選值的強(qiáng)制解析(forced unwrapping)捌锭。
實(shí)例如下:
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
print(myString)
}else{
print("myString 值為 nil")
}
以上程序執(zhí)行結(jié)果為:
Optional("Hello, Swift!")
強(qiáng)制解析可選值,使用感嘆號(!):
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
// 強(qiáng)制解析
print( myString! )
}else{
print("myString 值為 nil")
}
以上程序執(zhí)行結(jié)果為:
Hello, Swift!
注意:
使用!來獲取一個不存在的可選值會導(dǎo)致運(yùn)行時錯誤罗捎。使用!來強(qiáng)制解析值之前舀锨,一定要確定可選包含一個非nil的值。
自動解析
你可以在聲明可選變量時使用感嘆號(!)替換問號(?)宛逗。這樣可選變量在使用時就不需要再加一個感嘆號(!)來獲取值坎匿,它會自動解析。
實(shí)例如下:
import Cocoa
var myString:String!
myString = "Hello, Swift!"
if myString != nil {
print(myString)
}else{
print("myString 值為 nil")
}
以上程序執(zhí)行結(jié)果為:
Hello, Swift!
可選綁定
使用可選綁定(optional binding)來判斷可選類型是否包含值雷激,如果包含就把值賦給一個臨時常量或者變量替蔬。可選綁定可以用在if和while語句中來對可選類型的值進(jìn)行判斷并把值賦給一個常量或者變量屎暇。
像下面這樣在if語句中寫一個可選綁定:
if let constantName = someOptional {
statements
}
讓我們來看下一個簡單的可選綁定實(shí)例:
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if let yourString = myString {
print("你的字符串值為 - \(yourString)")
}else{
print("你的字符串沒有值")
}
以上程序執(zhí)行結(jié)果為:
你的字符串值為 - Hello, Swift!