《从零开始学Swift》学习笔记(Day 26)——可选链

原创文章,欢迎转载。转载请注明:关东升的博客php

 

Swift程序表达式中会看到问号(?)和感叹号(!),它们表明什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链。 java

可选链:微信

类图:网站

它们之间是典型的关联关系类图。这些类通常都是实体类,实体类是系统中的人、事、物。Employee经过dept属性与Department关联,Department经过comp属性与Company关联。spa

下面看示例代码:设计

class Employee {       var no: Int = 0     var name: String = "Tony"     var job: String?     var salary: Double = 0     var dept: Department = Department() }   class Department {     var no: Int = 10     var name: String = "SALES"     var comp: Company = Company() }   class Company {        var no: Int = 1000     var name: String = "EOrient" }   let emp = Employee()   //Employee实例 print(emp.dept.comp.name)  //

 

emp.dept.comp.name能够引用到Company实例,造成一个引用的链条,可是这个“链条”任何一个环节“断裂”都没法引用到最后的目标(Company实例)。code

给定一个Employee实例,必定会有一个Department与其关联。但现实是一个新入职员工未必有部门,这种关联关系有可能有值,也有可能没有值,咱们须要使用可选类型(Department?)声明dept属性。教程

修改代码以下:get

class Employee {     var no: Int = 0     var name: String = "Tony"     var job: String?     var salary: Double = 0     var dept: Department?   // = Department() }   class Department {     var no: Int = 10     var name: String = "SALES"     var comp: Company? // = Company() } class Company {     var no: Int = 1000     var name: String = "EOrient" } let emp = Employee() print(emp.dept!.comp!.name)    //显示拆包 print(emp.dept?.comp?.name)    //可选链

 

其中可选类型的引用,能够使用感叹号(!)进行显示拆包,代码修改以下:博客

print(emp.dept!.comp!.name)

可是显示拆包有一个弊端,若是可选链中某个环节为nil,将会致使代码运行时错误。咱们能够采用更加“温柔”的引用方式,使用问号(?)来代替原来感叹号(!)的位置,以下所示:

print(emp.dept?.comp?.name)

 

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 
更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:
http://www.zhijieketang.com
智捷课堂论坛网站:
http://51work6.com/forum.php