Swift 3.0 '??' -- if let / if var -- guard let

'??' 操作符號 運算登記低 相當于簡單的三目運算
三目運算:  條件 ?  結果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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 關于 Swift 重要這個文檔所包含的準備信息, 是關于開發的 API 和技術的。這個信息可能會改變, 根據這個文...
    無灃閱讀 4,378評論 1 27
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應用程序 ...
    大L君閱讀 3,304評論 3 25
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,865評論 0 6
  • 他的情話 字字扣人心弦 讓她的心顫抖不已 她多想全身心的投入啊 如飛蛾撲火 哪怕粉身碎骨 也要盡情的再愛一次 可是...
    開花的樹樹閱讀 274評論 0 0
  • 文|無喧 最近,《歡樂頌2》火爆上映,看評論說不如第一部好,加上現在也不怎么追劇,就沒有去看了。 但是每次打開百度...
    岑思木閱讀 651評論 2 3