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

  • 相关阅读:
    【NOIP模拟】寻找
    【NOIP模拟】行走
    【UVA11795】 Mega Man's Mission
    【UVA11825】Hackers' Crackdown
    【UVA1252】Twenty Questions
    BZOJ1718: [Usaco2006 Jan] Redundant Paths 分离的路径
    BZOJ1151: [CTSC2007]动物园zoo
    BZOJ1123: [POI2008]BLO
    BZOJ1040: [ZJOI2008]骑士
    POJ3417:Network
  • 原文地址:https://www.cnblogs.com/melons/p/5791982.html
Copyright © 2011-2022 走看看