• Swift学习-3.Optional、??、if-let、guard-let


    1.Optional

    Swift要求变量、常量都必须有个值,设置为空时编译会报错,所以Swift提出了可选。只要在常量或变量后添加一个 '?' 标识符就可以。

    var currentValue : Int? = nil
    var x:String? = "Optional variable"
    print(currentValue as Any)
    print(x as Any)
    
    currentValue = 1
    x = nil
    print(currentValue as Any)
    print(x as Any)
    

    2.三目运算: ? :

    var i : Int? = nil
    let ternary = i != nil ? i! : -1
    print("Value of i is (ternary)")//打印结果:-1
    

    3.if-let

    判断可选值是否有值;如果有值,将作为常量或变量的临时值。例如:

    var desc: String? = "Optionals"
    
    if let temp = desc{
      print(temp)
    }
    else{
     print("No description")
    }
    

    if-let是打开可选对象的推荐方法。

    4. ?? : if-let的简化形式

    var descripation = desc ?? "No description"
    

    当desc有值时,descripation = desc;如果没有值,使用默认值"No description",有些类似三目运算

    单个语句中包含多个可选绑定

    我们可以在一个if语句中使用逗号分隔多个可选对象

    var optionalX :String? = "x"
    var optionalY :String? = "y"
    if let x = optionalX, let y = optionalY
    {
    print(x) //prints "x"
    print(y) //prints"y"
    }
    else{
    print("One or more Optional can't be unwrapped")
    }
    

    但是上面方法有一个陷阱。如果其中一个可选值为空,都不符合if条件;所以上面的表达式只适合全部可选值都有值的情况,其他都走else方法。

    5.guard

    Guard类似于if条件,只是它只检查所有坏的情况。
    某种情况来说,guard是if的倒置条件;除此之外,guard只工作在函数内部

    func exampleGuard(){
        let didWeMeet = false
        guard !didWeMeet else {return}
        print("Did we meet?" + String(didWeMeet))
    }
    exampleGuard()
    

    在上面的代码中,如果在guard关键字之后输入的条件失败,函数将执行else case并返回。

    6.guard-let

    var second:String? = nil
    func guardStatements()
    {
        guard let sa = second else{
            print("nil value")
            return
        }
        print(sa)
    }
    guardStatements() //打印结果: nil value
    

    guard-let 与 if-let的区别

    1.guard语句使早期退出成为可能,强调否定的情况,而if条件等待所有嵌套条件的传递
    2.guard语句中的未包装值对于代码块的其余部分是可用的,而不需要强制/可选地再次展开

  • 相关阅读:
    博客第8周
    剑指offer 位运算
    真题
    剑指offer分类刷题(转载)
    PV PVC StorageClass是什么?
    k8s使用rbac实现多租户
    ansible-playbook 使用blockinfile 修改/etc/hosts 主机名
    ansible-playbook 一键部署ntp时间同步 yml
    简单搭建一个HTTP文件下载服务器
    常用docker命令备忘
  • 原文地址:https://www.cnblogs.com/PotatoToEgg/p/14917657.html
Copyright © 2020-2023  润新知