'??' 操作符號 運算登記低 相當于簡單的三目運算
三目運算: 條件 ? 結果1 :結果2
例:let a = 1 ; let b = 3
a>b ? print("a大于B") :print("a小于b")
**??的使用 (a ?? b) 如果a有值那就用a的值 如果沒有值就用'??'后面的來代替 **
??
let a = 90 ; let b = 20
print((a ?? 0) + (b ?? 0)) 結果:110
print(a ?? 0 + b)
結果:90 【因為 ?? 會進行判斷a是不是為nil ,此時 a = 90,所以??后面的b不會來替代a的值】
如:let a:String= nil ; let b:String = "老王"
print(a ?? "" + b!)
結果:老王 【因為 ?? 會進行判斷a是不是為nil ,此時 a = nil,所以??后面的b替代a的值】
let str ="隔壁家老王"
print(str ??"在等待著什么···")
結果:【隔壁家老王】
let sting ="apple"
print((sting ??"")+"上有Xcode")
結果:apple上有Xcode
****在使用'??'時最好加上'()'****
if let / if var
if let 和 if var 連用語法 目的:據說用來判斷值否為nil[空]**不是單純的if【if let / if var 在賦值的同時做判斷而if判只做判斷】
if let 對{}中的值不能做修改
例:
let name: String? = "OC"
let age: Int? = 20
if let name1 = name, age1 = age{
print(name1 + String(age1))
}
結果 : OC20 【進入分支就代表值不為nil】
或
let name = "Swift"
let age = 20
if let name1:String = name,age1:Int = age{
print(name1 + String(age1))
}
結果:Swift20
if var對{}中的值可做修改
let name = "Oc"
let age = 15
例1: 只對name的值做修改
if var name1:String = name,let age1:Int = age {//只對name對修改age不做修改那么在age1要給予let告訴編譯器age不做修改
name1 = "Swift"
print(name1 + String(age1))
}
結果: Swift15
例2: 對name和age都做修改
if var name1:String = name,age1:Int = age {//age沒有聲明let 編譯器會認為此時age是可以修改的
name1 = "Swift"
age1 = 20
print(name1 + String(age1))
}
結果: Swift20
guard let
1.guard let 和 if let剛好相反 guarg 守護一定有值,如果沒有值 就直接返回
2.通常判斷后有值就直接做邏輯處理
3.guard let 降低分支,if let 會憑空多一條分支
例:
let name: String? = "Object-c"
let age: Int? = 20
guard let name1 = name,age1 = age else {
print("ssssss")
return
}
print(name1 + String(age1))
結果:Object-c20
如果
let age = nil
結果:ssssss
guarg var
例:
let name: String? = "Object-c"
let age: Int? = 20
改變name和age的值
guard var name1 = name,age1 = age else {
print("其中有個值為nil")
return
}
name1 = "Swift"
age1 = 2
print(name1 + String(age1))
結果:Swift2
只改變一個的值
guard var name1 = name,let age1 = age else {
print("其中有個值為nil")
return
}
name1 = "Swift"
print(name1 + String(age1))
結果:Swift20
同樣 如果 let age = nil
輸出結果:其中有個值為nil