Swift-guard与let

Swift中类型中加入了?可选类型,因此在每次进行参数判断的时候都要加入是不是为nil的判断,我们通过简单的字符串判空来看一下guard,if let之间的区别:

    func guardCase(data:String?) -> Void {
        // 正常判断
        if data != nil && (data?.characters.count)! > 0 {
            print("guardCase--数据:\(data)")
        } else {
            print("guardCase--data没有数据")
        }
        
        // let 语句
        
        if let result = data, result.characters.count > 0 {
            print("let语句:\(result)")
        } else {
            print("result没有数据")
        }
        
        // guard 语句
        
        guard let result = data, result.characters.count > 0 else {
            print("guard无数据")
            return
        }
        
        print("guard数据执行")
        
    }

通过代码我们发现,没有太明显的区别if与if let 一样,guard与 if let 很相似,guard和if都是基于一个表达式的布尔值去判断一段代码是否该被执行,与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码,也可以说是guard先进行错误处理,然后才进行,逻辑执行.

当项目中参数if判断增多,我们可以考虑通过guard来优化一下代码逻辑,方便代码的后续维护:

    func guardCaseMulti(name:String?,param:String?) -> Void {
        
        // 正常判断
        if name != nil && (name?.characters.count)! > 0 {
            if  param != nil && (param?.characters.count)! > 0 {
                print("guardCaseMulti--数据:\(param)")
            } else {
                
            }
        } else {
            print("guardCaseMulti--data没有数据")
        }
        
        // let 语句
        
        if let result = name, result.characters.count > 0,let passWord = param, passWord.characters.count > 0 {
            print("let语句:\(result)---\(passWord)")
        } else {
            print("参数没有数据")
        }
        
        // guard 语句
        
        guard let result = name, result.characters.count > 0,let passWord = param, passWord.characters.count > 0 else {
            print("guardCaseMulti无数据")
            return
        }
        
        print("guardCaseMultiguard语句--\(result)---\(passWord)")
      
    }

你可能感兴趣的:(Swift-guard与let)