可選類型(optionals)#
使用可選類型用來處理可能缺失的情況纱兑。
有值迂烁,等于x、沒有值
查看數(shù)據(jù)類型使用 option+鼠標(biāo)左鍵
let URL = NSURL(string: "http://www.baidu.com/") // 被推測為NSURL?類型
let str: String? = "Swift"http:// 被推測為String?類型
//如果你聲明一個可選常量或者變量但是沒有賦值眷柔,它們會自動被設(shè)置為 nil
let a:Int?
直接打印結(jié)果.png
直接打印結(jié)果表明這是可選值卫玖,可以有值公你,可以為nil
注意:nil在Swift中是一個確定的值,用來表示值缺失
可選項判斷#
1>使用if語句判斷(需要強制解析)
if (URL != nil){
print(URL!)
}
2>使用if let
if let:確保有值假瞬,才會進入分支
if let myUrl = URL{
print(myUrl)
}
強制解析#
當(dāng)你確定可選類型確實包含值之后陕靠,你可以在可選的名字后面加一個感嘆號( ! )來獲取值。這個驚嘆號表示“我知道這個可選有值脱茉,請使用它剪芥。”這被稱為可選值的強制解析(forced unwrapping)
print(URL!)
print(str!)
不能print(a!)//會報錯 fatal error: unexpectedly found nil while unwrapping an Optional value
// a沒有賦值琴许,也就不包含值
注意:使用 ! 來獲取一個不存在的可選值會導(dǎo)致運行時錯誤税肪。使用 ! 來強制解析值之前,一定要確定可選包含一 個非 nil 的值榜田。
if let#
if let :確保有值益兄,才會進入分支
var aName: String? = "ningcol"
// var aName: String? = nil
var aAge: Int? = 18
if let name = aName,let age = aAge {
print(name + String(age))
}
// 可以對值進行修改
if var name = aName,let age = aAge {
name = "lisi"
print(name + String(age))
}
guard#
guard與if let相反,表示一定有值,沒有就直接返回
let oName: String? = "張三"
let oNum: Int? = 18
guard let name = oName else {
print("name 為空")
return
}
guard let num = oNum else {
print("num 為空")
return
}
隱式解析可選類型#
可以把隱式解析可選類型當(dāng)成對每次使用的時候自動解包的可選類型箭券。即不是每次使用的時候在變量/常量后面加净捅!,而是直接在定義的時候加辩块!
// 非隱式解析可選類型
let possibleString: String? = "An optional string"
let forcedString: String = possibleString!//需要感嘆號來獲取值
// 隱式解析可選類型
// 隱式解析是指可以確認(rèn)該可選類型在賦值后一直有值
let assumedString: String! = "An implicitly unwrapped optional string"
let implicitString: String = assumedString//不需要感嘆號
// 注:如果一個變量之后可能變?yōu)?nil 的話,請不要使用隱式解析可選類型,若需要在變量的生命周期中判斷是否為 nil 的話,請使用普通可選類型