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

  • 相关阅读:
    Spring-IOC容器
    VUE 过滤器
    axios.post参数问题
    Stylus| vue项目中stylus和stylus-loader版本兼容问题
    SPA
    Options API 和 Composition API 的对比
    【ES6学习笔记之】Object.assign()
    vue element-ui 常用组件
    Vue调试工具
    组件
  • 原文地址:https://www.cnblogs.com/melons/p/5791982.html
Copyright © 2011-2022 走看看