zoukankan      html  css  js  c++  java
  • 【iOS】swift-如何理解 if let 与guard?

    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:黄兢成
    链接:http://www.zhihu.com/question/36448325/answer/68614858
    来源:知乎

    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 进行改写。试多几次,就会发觉很自然了。

  • 相关阅读:
    (寒假练习 AcWing 870)约数个数(数论)
    (补题 CF 1271B) Blocks
    (补题 POJ-2228)Naptime(环状DP)
    实验 ·SQL语言综合练习
    (补题 水题 汇总)四川大学第二届SCUACM新生赛
    (补题 CF 455A)Boredom(DP)
    (补题 HDU 1176)免费馅饼(DP)
    deppin下使用vscode编写C++
    (补题 CF 355B) Vasya and Public Transport
    【数据结构】ACwing-41. 包含min函数的栈【单调栈】
  • 原文地址:https://www.cnblogs.com/melons/p/5791982.html
Copyright © 2011-2022 走看看