加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 07:13:27 所属栏目:百科 来源:网络整理
导读:原创文章,欢迎转载。转载请注明:关东升的博客 在 Swift 程序表达式中会看到问号( ? )和感叹号( ! ),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链。 可选链: 类图: 650) this.width=650;" width="600" height="142" tit

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

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

可选链:

类图:

wKiom1bWRveBlfgKAAlfq0w3lFY293.jpg

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

下面看示例代码:

classEmployee{
varno:Int=0
varname:String="Tony"
varjob:String?
varsalary:Double=0
vardept:Department=Department()
}

classDepartment{
varno:Int=10
varname:String="SALES"
varcomp:Company=Company()
}

classCompany{
varno:Int=1000
varname:String="EOrient"
}

letemp=Employee()//Employee实例
print(emp.dept.comp.name)//


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

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

修改代码如下:

classEmployee{
varno:Int=0
varname:String="Tony"
varjob:String?
varsalary:Double=0
vardept:Department?//=Department()
}

classDepartment{
varno:Int=10
varname:String="SALES"
varcomp:Company?//=Company()
}
classCompany{
varno:Int=1000
varname:String="EOrient"
}
letemp=Employee()
print(emp.dept!.comp!.name)//显示拆包
print(emp.dept?.comp?.name)//可选链


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

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


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

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


欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息

wKioL1bWR8nhC-H9AAAs2MBEZnc345.png

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.com/forum.php

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读