美文网首页
第十七节 Swift 中的可选链

第十七节 Swift 中的可选链

作者: 码客南君 | 来源:发表于2020-07-14 11:07 被阅读0次

    在属性、方法的可选值后面放一个问号(?),就定义了一个可选链。

    当属性、方法的可选值为空时,可选链的调用只会失败,而不会触发运行时错误。如果是在可选值的后面放一个叹号(!)来强制展开值,如果可选值为空,!就会触发运行时错误,App会发生崩溃。

    代码示例

    定义两个类,Person 和 House:

    class Person {
        var house: House?
    }
    
    class House {
        var numberOfRooms = 3
    }
    

    Person 实例有一个 House? 类型的可选 house 属性。
    House 实例有一个 Int属性 numberOfRooms,默认值 3。

    新建一个 Person实例,house 属性会默认初始化为 nil,下面代码中,mike拥有值为 nil的 house属性。

    let mike = Person()
    

    访问 mike的 house属性,如果通过叹号(!) 强制展开 house的值,就会触发一个运行时错误,因为此时的 house值为 nil。

    let roomCount = mike.house!.numberOfRooms
    

    如果 mike.house 有值不是nil,那上面的代码就会把 numberOfRooms的值赋值给 roomCount。

    推荐使用可选链的方法。来获得 numberOfRooms的值,这样如果 mike.house的值为nil,也只是会调用失败,App不会奔溃。

    if let roomCount = mike.house?.numberOfRooms {
    print("Mike's residence has \(roomCount) room(s).")
    } else {
    print("Unable to retrieve the number of rooms.")
    }
    
    // 打印 “Unable to retrieve the number of rooms.”
    

    相关文章

      网友评论

          本文标题:第十七节 Swift 中的可选链

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