可選類型(Optionals)
- 可選項: 允許將其設置為nil
var name: String? = "jack"
var age: Int?
age = 10
- 強制解包
var age1: Int?
age1! //Fatal error: Unexpectedly found nil while unwrapping an Optional value:
age1 = 10
age1! //確定可選性不為空的時候才可以強制解包
- 可選項綁定: 通過把值賦給一個臨時的常量(let)或者變量(var)垂睬,并返回true/false ,ture 就會自動解包
if let num = Int("123"), num > 0 { //多條件判斷時,與可選項綁定鄰近的條件與可選項綁定之間用“,”連接柔袁,不可以用&&
print(num)
} else {
print("false")
}
- 空合并運算符
a ?? b
- a 是可選項
- b 是可選或者不是可選
- a和b的存儲類型必須相同
- a != nil 返回 a
- a == nil 返回 b
- b 不是可選類型時提茁,返回的 a 是會d自動解包
- 注意返回值得類型
- guard 語句
let info: [String : String] = ["user" : "swift"]
func guardTest() {
guard var user = info["user"] else { // false 時執(zhí)行大括號里的代碼。 true 時跳過 guard 語句繼續(xù)執(zhí)行
return // 必須跳出當前作用域耕挨, return拥娄,break耸弄,continue,throw秒咨,error
}
user = "oc" // guard 語句進行可選綁定時喇辽, 綁定的let,var 可以在 guard 的外層作用域中使用
print(user)
}
guardTest()
- 隱式解包: 可以不進行檢查拭荤,也可以訪問時不進行解包茵臭。因為會自動解包。 但是因為是可選類型可能為 nil舅世,使用時 nil 會編譯時報錯旦委。能確定一直有值不為 nil 的時候可以使用
var num1: Int! = 10
num1 = nil
var num2: Int = num1 ?? 0
- 多重可選項
var num1: Int? = 10
var num2: Int?? = num1
var num3: Int?? = 10
print(num2 == num3)
let n = (num2 ?? 10) ?? 2
var num4: Int? = nil
var num5: Int?? = num1
var num6: Int?? = nil
print(num5 == num6)
// frame variable -R / fr v -R 查看內存結構 查看詳細問題