'??' 操作符号 运算登记低 相当于简单的三目运算
三目运算: 条件 ? 结果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