Swift开发

Swift if let / var 连用语法与guard l

2016-07-30  本文已影响762人  Stormstout

1.if let / var 连用语法

//MARK: if let / var 连用语法,目的就是为了判断值
    func demo(name :String? ,age :Int?)
    {
        
        //事例1.用if语法判断值是否为空
        
        if name != nil && age != nil
        {
            //强行解包有风险
            //print(name! + String(age!))
        }
        else
        {
            //print("name或者age为nil")
        }
        
        
        //事例2.使用if let / var 进行判断值是否为空
        if var name = name,let age = age
        {
            //非空的name和age仅在{}中有用
            //使用变量Name接受name参数,并改变值
            Name = "老李"
            //进入分支后name和age一定有值 不需要解包 `!`
            print("姓名:" + (name) + " 年龄:" + String(age))
        }
        else
        {
            print("name或者age为nil")
        }
        
    }

事例1:
在viewDidLoad中调用方法,并传入两个参数,输出结果
调用:demo(name: "张三", age: 27)
结果:姓名:老李 年龄:27

事例2:
在viewDidLoad中调用方法,并传入nil
调用:demo(name: "张三", age: nil)
结果:name或者age为nil

2.guard let语法

    //MARK: - guard
    func demo(nName:String? ,nAge:Int?)
    {
        //guard let 和 if let 相反 当值为空时执行
        //使用同名变量接收值,在后续使用中都是非空值
        guard let nName = nName ,  nAge = nAge else
        {
            print("nName 或者 nAge为 nil")
            
            return
        }
        
        //代码运行至此,表示一定有值
        print("姓名:" + (nName) + " 年龄:" + String(nAge))
    }

事例代码:取自王巍demo

    //逐级判断,一但为nil就退出分支
    if let JsonDic = json as? NSDictionary,
                 menu = jsonDic["munu"] as? [String: AnyObject],
                popup = menu["popup"],
         popupDic = popup as? [String : AnyObject],
      menuItems = popupDic["menuitem"],
 mtnuItemsArr = menuItems as? [AnyObject],
                item0 = menuItemsArr[0] as? [String : AnyObject],
                 value = item0["value"]
    {
        print(value)
    }
    
    //从左到右逐级判断,只要为nil直接退出分支
    if let value = JSON(json)["menu"]["popup"]["menuitem"][0]["value"].string
    {
        print(value)
    }
上一篇下一篇

猜你喜欢

热点阅读