美文网首页Swift 5.x 学习之旅
swift学习之旅--可选链

swift学习之旅--可选链

作者: Auditore | 来源:发表于2020-06-16 22:08 被阅读0次

    1.可选链的含义

    可选链,就是在声明属性的时候,在属性的类型后面加上?问号,使得属性有一个默认值nil,这个特性非常方便,因为OC里,我们经常会需要先判断值是nil的情况和有值的情况。如果用可选链,就能免去写一堆的if(xxx = nil)省心。

    当然,如果你用?可选链,那么当你赋值的时候,编译器会让你提供默认值,例如下面

    func STATUSBAR_HEIGHT() -> CGFloat {
        return windowKey?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
    }
    

    2.?和!的区别

    class Person {
        var residence: Residence?
    }
     
    class Residence {
        var numberOfRooms = 1
    }
    

    如果你创建一个新的 Person 实例,得益于可选项的特性,它的 residence 属性会默认初始化为 nil 。下面的代码中, john 拥有值为 nil 的 residence 属性:

    let john = Person()
    

    如果你尝试访问john的 residence 里的 numberOfRooms 属性,通过在 residence 后放一个叹号来强制展开它的值,你会触发一个运行时错误,因为 residence 根本没有值可以展开:

    let roomCount = john.residence!.numberOfRooms
    // 此时会报错
    

    或者你非常肯定,不可能为nil,一定取得到值那么就直接加上!,表示强制展开,当然,你得承受可能会崩溃的后果。

    3.官方文档里是这么说的

    你可以通过在你希望如果可选项为非 nil 就调用属性、方法或者脚本的可选值后边使用问号( ? )来明确可选链。这和在可选值后放叹号( ! )来强制展开它的值非常类似。主要的区别在于可选链会在可选项为 nil 时得体地失败,而强制展开则在可选项为 nil 时触发运行时错误。

    为了显示出可选链可以在 nil 值上调用,可选链调用的结果一定是一个可选值,就算你查询的属性、方法或者下标返回的是非可选值。你可以使用这个可选项返回值来检查可选链调用是成功(返回的可选项包含值),还是由于链中出现了 nil 而导致没有成功(返回的可选值是 nil )。

    相关文章

      网友评论

        本文标题:swift学习之旅--可选链

        本文链接:https://www.haomeiwen.com/subject/jpsdxktx.html