天天看點

005--swift基礎文法(邏輯分支)

簡單的分支 if語句

// MARK: - 簡單的分支
    func demo(){
        let x = 

        /**
         1. 條件不需要()
         2. 語句必須有{}
          --很多公司的代碼規範中,禁止不使用{}
         */
        if x > {
            print("大了")
        }else{
            // Condition always evaluates to true
            // 永遠不會執行  - 編譯器編譯的時候,會做文法檢查
            print("小了");
        }
    }
           

三目的文法

func demo1(){
        let x =
        //三目的文法和OC的基本是一樣的
        x > ? print("大了") : print("小了")

        //分享,有印象就行
        //`()`表示空執行
        x > ? print("大了") : ()
    }
           
func demo2(){
        let x: Int? = 
        let y: Int? = 

        //強行解包有風險
        print(x! + y!)
    }
           

MARK: - ??

func demo3(x:Int?,y:Int?)
    {
        /**
         ?? 是一個簡單的三目
         - 如果有值  使用值
         - 如果沒有值,使用??後面的值代替
         */
        print((x ?? ) + (y ?? ))

        let name:String? = "老王"
        print((name ?? "")+"你好")
        //??優先級“低”  在使用的時候最好加上()
        print(name ?? ""+"你好")

    }
           

if let/var 連用文法

//MARK: -if let/var 連用文法,目的是判斷值
    func demo4(){
        let oName:String? = "老王"
        let oAge:Int? = 

        if oName != nil &&  oAge != nil{
            print(oName! + String(oAge!))
        }

        // if let 連用,判斷對象的值是否為nil {}内一定有值,可以直接使用,不需要解包
        // if var 連用,{}可以對值進行修改

        if let name = oName,
            let age = oAge{
            //進入分支以後,name和age一定有值,不需要解包
            //name 和 age 的作用域僅在{中}
            print(name + String(age))
        }
    }
           

guard let 和 if let 剛好相反

//MARK: - guard 守衛 / 守護
    //guard let 和 if let 剛好相反
    func demo5(){
        let oName:String? = "老王"
        let oAge:Int? = 

        //guard let 守護一定有值,如果沒有直接傳回
        guard let name = oName,
            let age = oAge else {
            print("姓名或者年齡為 nil")
            return
        }
        // 代碼執行至此,name 和 age 一定有值!
        // 通常判斷是否有值之後,會做具體的邏輯實作,通常代碼多!
        // 如果用 if let 憑空多了一層分支,guard是降低分支層次的辦法
        // guard 的文法是 Swift2.0 推出的
        // guard 是Swift 2.0推出來的
        print(name + String(age))

    }
           

guard let & if let 使用技巧

//guard let & if let 使用技巧
    func demo6(name: String?,age: Int?){

        if let name = name , let age = age {
            //非空的name和age僅在花括号中有效
            print(name + String(age))
        }

        //使用同名額變量接收值,在後續使用的都是非空值,不需要解包
        //好處,可以避免起名字的煩惱
        guard let name = name,let age = age else {
            print("姓名或者年齡為nil")
            return
        }
        print(name + String(age))
    }