Swift 风骚的Guard语法

if let 和 guard 只是语法糖,没有也可以,但有了可以使得代码更简洁方便。要理解 if let 和 guard,不妨设想假如没有这两者,代码会怎么写。

if let

    func doSomething(str: String?) {
        let v :String! = str
        if v != nil
        {
            // use v to do something
        }
    }

Swift 中因为有optional, 经常需要判断是否为空。假如没有if let,大致写成上面的样子,有了if let, 可以改写成

    func doSomething(str: String?) {
        if let v = str
        {
            // use v to do something
        }
    }

上面两段代码的控制流是一样的。对照着,可以看出if let的写法更加简洁方便。

guard

假如if中出现的代码很长,我们写代码时可以将错误情况先返回。比如:

    func doSomething(str: String?) {
        let v:String! = str
        if v == nil
        {
            return
        }
        // use v to do something
    }

这样做可以避免过多的嵌套。上面代码实在太常见了,swift也提供一个guard这个语法糖,用guard可以改写成:

    func doSomething(str: String?) {
        guard let v = str else { return }
        // use v to do something
    }

上面两段代码的控制流是一样的。也可以看出guard的写法更加简洁方便。
至于if let 和 guard 语法中出现的where,只是附加一些条件。相当于逻辑运算 && 和 ||。SQL中的条件语法也是用where这个关键字。
假如还不理解,动手将一段代码,不用if let 和 guard 进行改写。试多几次,就会发觉很自然了。

总结

与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容