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

  • 相关阅读:
    Scala之eq,equals,==的区别
    Spark Streaming流计算特点及代码案例
    刷题50—水壶问题
    刷题49(力扣3道题)
    刷题48——最长回文串
    刷题47——矩形重叠
    刷题46——拼写单词
    刷题45(力扣两道题)
    刷题44——岛屿的最大面积
    刷题43——最长上升子序列
  • 原文地址:https://www.cnblogs.com/melons/p/5791982.html
Copyright © 2020-2023  润新知