swift之guard关键字

作者: 花郎 | 来源:发表于2016-12-20 17:24 被阅读467次

前言

看了很多关于guard关键字的文章,但是还是不能够很好的理解它,而且网上的很多文章示例在我亲自测试的情况下大部分都编译不了,可能是姿势不对,也有些是写法有误,不过这反而让我更困惑,所以在swift3下我梳理了下这部分的内容,打算对guard关键字一探究竟

guard关键字是什么

guard关键字在官方文档中的在Early Exit章节,具体解释如下:

“A guard statement, like an if statement, executes statements depending on the Boolean value of an expression. You use a guard statement to require that a condition must be true in order for the code after the guard statement to be executed. Unlike an if statement, a guard statement always has an else clause—the code inside the else clause is executed if the condition is not true.”

摘录来自: Apple Inc. “The Swift Programming Language (Swift 3.0.1)”。 iBooks.

翻译为中文就是:

guard语句类似于if语句,是否执行语句也是基于Boolean表达式,使用guard关键字需要条件为true才会让guard后面的语句执行。与if语句不通,guard语句一直需要有一个else语句块,else语句块是条件不满足时需要执行的代码

guard与if的区别

其实guard可以理解为对if的一种优化,可以让代码写的更优雅,如官方稳定的标题Early Exit,而这也是guard关键字最关键的作用,让检查在最开始的时候完成,而不是通过一大坨判断然后将需要执行的语句放到if语句块内

另外使用guard有很多好处:

  • 而guard关键字为什么一定要有个else呢?其实就是想让你检查你期望的条件,而不是通过一堆判空检查你不希望的条件,这样更加接近自然语言,更易理解
  • 如果检查通过,会自动将optional变量解包,以便后面的语句使用
  • 可以尽早Early Exit将bad cases过滤掉,而不希望变成通过一堆层层的if判断这种金字塔式的写法,这样代码看起来也更加优雅

啰嗦了这么多,让我们用一个🌰来解释下guard与if的不同吧

import Foundation

var hi: String? = "hello world"

func testGuard(say: String?) {
    guard let sayHi = say else {
        print("sayHi is nil")
        return
    }
    
    print(sayHi)
}

func testIf(say: String?) {
    if let sayHi = say {
        print(sayHi)
    }
}

testGuard(say: hi)
testIf(say: hi)

:如果guard的代码块中不写break或return,代码会无法编译,报错:'guard' body may not fail through, consider using 'return' or 'break' to exit the scope

当然也有人持不同观点,认为guard重构后的代码反而更加难懂了。我个人的观点是看使用场景吧,很多场景(如复杂的逻辑条件判断)不一定适合使用guard,当然对于大多简单的条件判断我是会使用guard的

参考资料及优秀文章

相关文章

  • OC中有guard吗??

    先来看看 Swift 的 guard 关键字 guard 是 Swift 中特有的一个关键字,用于处理一些条件不成...

  • [OC] 如何在 OC 中使用类似 Swift 的 guard

    Swift 的 guard 关键字 guard 是 Swift 中特有的一个关键字,用于处理一些条件不成立时进行函...

  • swift之guard关键字

    前言 看了很多关于guard关键字的文章,但是还是不能够很好的理解它,而且网上的很多文章示例在我亲自测试的情况下大...

  • Swift 2.0 - Guard

    Overview:Guard 是Swift 1.2之后新引进的一个关键字。Guard 的功能是帮助你的程序在进行有...

  • SwiftCafe 快报 - defer 关键字

    defer 关键字也是 Swift 2.0 中提供的新语法,就像是上期中我们提到的 guard 关键字一样。都是 ...

  • Swift 关键字 guard

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

  • Swift之Guard

    GitHub Demo: https://github.com/BaHui/BHSwifter 简介 guard...

  • 为什么Swift中应该避免使用guard语句

    为什么Swift中应该避免使用guard语句 为什么Swift中应该避免使用guard语句

  • Swift-guard关键字

    1.guard关键字必须使用在函数中。2.guard关键字必须和else同时出现。3.guard关键字只有条件为f...

  • swift的guard关键字

    guard语句 guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么。但与i...

网友评论

    本文标题:swift之guard关键字

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