美文网首页
第十七节 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