本文概述
- 可选链接作为强制展开选项
- 可选的链接示例(在基类中没有声明值)
- 可选链接和访问属性的模型类
你可以将多个查询链接在一起, 但是如果链接中的任何链为nil, 则整个链都会失败。
可选链接作为强制展开选项通过在可选值之后放置问号(?)来指定可选链接, 如果可选值不为nil, 则在调用该属性, 方法或下标时在该可选值之后放置一个问号(?)。
可选链接 | 强制展开 |
---|---|
可选链接为nil时, 可选链接失败。 | 可选为nil时, 强制展开会触发运行时错误。 |
运营商 ?放置在调用属性, 方法或下标的可选值之后 | !放在可选值之后以调用属性, 方法或下标以强制展开值。 |
让我们来看一个示例, 以了解可选链接和强制替代之间的区别:
使用?的可选链接程序操作员
class Exam {var student: Toppers?}class Toppers {var name = "Intelligent"}let stud = Exam()if let studname = stud.student?.name {print("Student name is \(studname)")} else {print("Student name cannot be retrieved")}
输出
Student name cannot be retrieved
【Swift可选链介绍和用法示例】在这里, 考试是一个班级名称, 其中包含学生作为会员的功能。子类声明为Toppers, 名称为成员函数, 其初始化为” Intelligent” 。通过创建带有可选” ?” 的实例” stud” 来初始化对超类的调用。
由于该值未在基类中声明, 因此nil由else处理程序块存储和显示。
可选链接和访问属性的模型类当你必须将多个子类声明为模型类时, 可以使用它。它可以帮助你定义复杂的模型以及访问方法, 属性, 下标, 子属性。
例子
class rectangle {var print: circle?}class circle {var area = [radius]()var cprint: Int {return area.count}subscript(i: Int) ->
radius {get {return area[i]}set {area[i] = newValue}}func circleprint() {print("The number of rooms is \(cprint)")}var rectarea: circumference?}class radius {let radiusname: Stringinit(radiusname: String) { self.radiusname = radiusname }}class circumference {var circumName: String?var circumNumber: String?var street: String?func buildingIdentifier() ->
String? {if circumName != nil {return circumName} else if circumNumber != nil {return circumNumber} else {return nil}}}let rectname = rectangle()if let rectarea = rectname.print?.cprint {print("Area of rectangle is \(rectarea)")} else {print("Rectangle Area is not specified")}
输出
Rectangle Area is not specified
推荐阅读
- SwiftyJSON介绍和开发示例详解
- Swift中的计时器解释和用法示例
- Swift 4类型转换介绍和用法示例
- Swift 4初始化介绍和用法示例
- Swift反初始化介绍和用法
- Swift 4下标用法示例
- Swift中的继承介绍和使用示例
- Swift 4方法介绍和用法详细示例
- 笔记本声音小怎样办,本文教您笔记本电脑声音小怎样办