美文网首页Swift编程
使用 guard 来改善你的条件判断

使用 guard 来改善你的条件判断

作者: 码农UP2U | 来源:发表于2020-01-24 22:43 被阅读0次

今天学了 极客时间张杰 老师的 Swift,今天看的内容是 guard 关键字,说实话感觉暂时没有感觉出来它的好处。

guard

  • guard 语句,类似于 if 语句,基于不二之表达式来执行语句。使用guard 语句来要求一个条件必须是真才能执行 guard 之后的语句。与 if 语句不通,guard 语句总是有一个 else 分之 —— else 分句里的代码会在条件不为真的时候执行。
  • 当编写条件语句的时候,左边的代码间距应该是一个“黄金”或者“快乐”的大道。这是说,不要嵌套 if 语句。多个 return 语句是 OK 的。这样可以避免圈复杂度(Cyclomatic Complexity),并且让代码更加容易阅读。因为你的方法的重要部分没有嵌套在分支上,你可以很清楚地找到相关的代码。

检查 api 的可用性

这是 guard 关键字使用的实例

  • Swift 拥有内置的对 API 可用性的检查功能,它能够确保你不会悲剧地使用了对部属目标不可 用的 API。
  • 你可以在 if 或者 guard 语句中使用一个可用性条件来有条件地执行代码,基于在运行时你想 用的哪个 API 是可用的。

示例

课程中讲了一个反例,反例如下:

func isIpAddress(ipString: String) -> (Int, String) {
    let components = ipString.split(separator: ".")
    
    if components.count == 4 {
        if let first = Int(components[0]), first >= 0 && first <= 255 {
            if let second = Int(components[1]), second >= 0 && second <= 255 {
                if let third = Int(components[2]), third >= 0 && third <= 255 {
                    if let fourth = Int(components[3]), fourth >= 0 && fourth <= 255 {
                        return (0, "ip 地址合法")
                    } else {
                        return (4, "ip 地址第四部分不对")
                    }
                    
                } else {
                    return (3, "ip 地址第三部分不对")
                }
            } else {
                return (2, "ip 地址第二部分不对")
            }
        } else {
            return (1, "ip 地址第一部分不对")
        }
    } else {
        return (100, "ip 地址必须有四部分")
    }
}

print(isIpAddress(ipString: "127.0.0.1"))

看到反例的写法以后,又给出了使用 guard 关键字解决的方法,代码如下:

func isIpAddress1(ipString: String) -> (Int, String) {
    let components = ipString.split(separator: ".")
    
    guard components.count == 4 else {
        return (100, "ip 地址必须有四部分")
    }
    
    guard let first = Int(components[0]), first >= 0 && first <= 255  else {
        return (1, "ip 地址第一部分不对")
    }
    
    guard let second = Int(components[1]), second >= 0 && second <= 255 else {
        return (2, "ip 地址第二部分不对")
    }
    
    guard let third = Int(components[2]), third >= 0 && third <= 255 else {
        return (3, "ip 地址第三部分不对")
    }
    
    guard let fourth = Int(components[3]), fourth >= 0 && fourth <= 255 else {
        return (4, "ip 地址第四部分不对")
    }
    
    return (0, "ip 地址合法")
}

print(isIpAddress1(ipString: "127.0.0.1"))

说实话,我真没感觉到它的好用之处,对于第一个反例,通常我们也不会那样写代码,通常我们的写法是:

func isIpAddress(ipString: String) -> (Int, String) {
    let components = ipString.split(separator: ".")
    
    if components.count != 4 {
        return (100, "ip 地址必须有四部分")
    }

    if () {
    }

也就是让尽早的不合理提早的返回,其实 guard 也是这样做了。所以,没有太多的体会到 guard 的用法。



我的微信公众号:“码农UP2U”

相关文章

  • 使用 guard 来改善你的条件判断

    今天学了 极客时间 里 张杰 老师的 Swift,今天看的内容是 guard 关键字,说实话感觉暂时没有感觉出来它...

  • 如何使用guard来改善条件判断

    guard guard语句,类似于 if 语句,基于 布尔值表达式来执行语句。使用 guard 语句来要求一个条件...

  • 使用 guard 改善条件判断

    guard guard 语句,类似于 if 语句,基于布尔值表达式来执行语句。使用 guard 语句来要求一个条件...

  • Swift guard

    guard guard 语句,类似于 if 语句,基于布尔值表达式来执行语句,使用 guard 语句来要求一个条件...

  • Swift guard 关键字 笔记

    guard 语句,类似于 if 语句,基于布尔值表达式来执行语句。使用 guard 语句来要求一个条件必须是真才能...

  • Swift 关键字 guard

    guard语句,类似于if语句,基于布尔值表达式来执行语句。 使用guard语句来要求一个条件必须是真才能...

  • guard 语句使代码更舒爽

    guard 语句,类似于 if 语句,基于布尔值表达式来执行语句。使用guard 语句来要求一个条件必须是 tru...

  • (快速入门)条件判断+循环+Map+Set

    条件判断 JavaScript使用if () { ... } else { ... }来进行条件判断。 多行条件判...

  • JavaScript 条件判断

    条件判断 JavaScript使用 if () { ... } else { ... } 来进行条件判断。例如,根...

  • JS--判断条件

    JS--判断条件JavaScript使用if () { ... } else { ... }来进行条件判断: 其中...

网友评论

    本文标题:使用 guard 来改善你的条件判断

    本文链接:https://www.haomeiwen.com/subject/epchthtx.html