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

  • 相关阅读:
    Python实现归并排序
    zip解决杨辉三角问题
    Python中协程、多线程、多进程、GIL锁
    Python copy(), deepcopy()
    Python collections的使用
    javascript中的类
    python3中的zip函数
    三数之和(Python and C++解法)
    两数之和(Python and C++解法)
    Python中list、dict、set、tuple的用法细节区别
  • 原文地址:https://www.cnblogs.com/melons/p/5791982.html
Copyright © 2011-2022 走看看