Swift4.0 學習筆記 第四節:可選項的判斷

//
//  ViewController.swift
//  007-可選項的判斷
//
//  Created by 莊壯勇 on 2018/1/2.
//  Copyright © 2018年 Personal. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        demo4(name: "老王", age: 18)
    }

    func demo4(name: String?, age: Int?) {
       
        if let name = name,let age = age {
           
            // 非空的 name 和 age 僅在{}內有效!
            print(name + String(age))
            print("----------")
        }
       
       
        // guard let & if let 的技巧
        // 使用同名的變量接收值,在後續使用的都是非空值,不需要解包
        // 好處,可以避免起名字的煩惱!
        guard let name = name,let age = age else {
            print("姓名或者年齡爲nil")
            return
        }
        print(name + String(age))

    }
   
    // MARK: - guard 守衛/守護
    // guard let 和 if let 剛好相反
    func demo3() {
        let oName: String? = "老王"
        let oAge: Int? = nil
    
        // guard let 守護一定有值,如果沒有直接返回
        guard let name = oName,let age = oAge else {
            print("姓名或者年齡爲nil")
            return
        }
       
        // 代碼執行至此,name 和 age 一定有值!
        // 通常判斷是否有值之後,會做具體的邏輯實現,通常代碼多!
        // 如果用if let 憑空多了一層分支,guard 是降低分支層次的辦法
        // guard 的語法是Swift2.0推出的!
        print(name + String(age))

    }
   
   
    // MARK: - if let / var 連用語法,目的就是判斷值
    // 不是單純的if
    func demo2() {
        let oName: String? = "老王"
        let oAge: Int? = 10
        if oName != nil && oAge != nil {
            print(oName! + String(oAge!))
        }
       
        // if let 連用,判斷對象的值是否爲nil ,{}內一定有值,可以直接使用,不需要解包
        // if var 連用, {}可以對值進行修改
        if var name = oName,let age = oAge {
            name = "老李"
            // 進入分支之後,name和age 一定有值,不需要解包
            // name 和age 的作用域僅在{}中
            print(name + String(age))
        } else {
            print("name 或者 age 爲nil")
        }
    }
   
    // MARK: - ??
    func demo1(x: Int?,y: Int?) {
        /**
          ?? 是一個簡單的 三目
          - 如果有值,使用值
          - 如果沒有值, 使用?? 後面的值替代
         */
        print((x ?? 0) + (y ?? 0))
       
        let name: String? = "老王"
        print((name ?? "") + "你好")
        // ?? 操作符號的優先級'低',在使用的時候,最好加上()包一下
        print(name ?? "" + "你好")
    }
    func demo(x: Int?,y: Int?)  {
        // 1.強行解包有風險
        // print(x! + y!)
        // 2.使用if判斷
        // 但是: 如果直接使用if,一不小心,會讓代碼很醜陋
        if x != nil && y != nil {
            print(x! + y!)
        } else {
            print("x 或者 y 爲nil")
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章