Swift可选项的判断

/**

 *  1. ?? 是一个三目   见demo1

        - 如果有值,使用值

        - 如果没有值,使用 ?? 后面的值

 

    2. if let / var 连用语法,目的就是判断值,见 demo2

 

    3. guard 守卫 / 守护, 如果没有值,就直接返回;否则继续往下。

 

    4. guard let & if let 的技巧,变量 请看demo4

 */

 

class ViewController: UIViewController

{

    override func viewDidLoad()

    {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        

//        demo(x: 10, y: 100)

//        demo1(x: 10, y: 200)

        demo2()

    }

    

    func demo4(name: String?, age: Int?)

    {

        

        if let name = name, let age = age

        {

            print("name=" + name + "; age=" + String(age))

        }

        

        // guard let & if let 的技巧

        // 使用同名的变量接收值,在后续使用的都是非空值,不需要解包

        // 好处,可以避免起名字的烦恼

        guard let name = name, let age = age else

        {

            print("姓名或者年龄为空");

            return;

        }

        print("name=" + name + "; age=" + String(age))

    }

    

    func demo3()

    {

        let oName: String? = "tanb"

        let oAge: Int? = 10

        

        // guard let 守护一定有值,如果没有值,直接返回

        guard let name = oName, let age = oAge else

        {

            print("姓名或者年龄为nil")

            return

        }

        print(name + String(age))

        

    }

    

    // MARK: - if let / var 连用语法,目的就是判断值

    func demo2()

    {

        let oName: String? = "唐斌"

        let oAge: Int? = 10

        

        if oName != nil && oAge != nil

        {

            print(oName! + String(oAge!))

        }

        

        

        // if let 连同, 判断对象的值是否为 nil

        if var name = oName, let age = oAge

        {

            name = "老王"

            // 进入分支之后,name he 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 ?? "") + "你好")

        

    }

 

    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")

        }*/

    }

    

 

}

posted on 2017-07-11 09:18  TangBin604  阅读(181)  评论(0编辑  收藏  举报

导航