《从零开始学Swift》学习笔记(Day 26)——可选链
admin
2023-02-10 08:20:08
0

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

 

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

 

可选链:

类图:

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

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

下面看示例代码:

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实例)。

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

修改代码如下:

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_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 《从零开始学Swift》学习笔记(Day 26)——可选链

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

 


相关内容

热门资讯

终于懂了“棋乐碰胡.有没有挂?... 您好:棋乐碰胡这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
今日重大消息“七彩丹霞.怎么装... 您好:七彩丹霞这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
终于了解“福星游戏.辅助开挂神... 终于了解“福星游戏.辅助开挂神器?”确实真的有挂您好,福星游戏这个游戏其实有挂的,确实是有挂的,需要...
今日重大消息“微信小程序麻将.... 今日重大消息“微信小程序麻将.可以开挂吗?”必胜开挂神器您好,微信小程序麻将这个游戏其实有挂的,确实...
重磅消息“打两圈麻将.可以开挂... 有 亲,根据资深记者爆料打两圈麻将是可以开挂的,确实有挂(咨询软件无需打...
【今日要闻】“蜀山四川麻将.有... 【今日要闻】“蜀山四川麻将.有挂吗?”太坑了果然有挂您好,蜀山四川麻将这个游戏其实有挂的,确实是有挂...
重磅消息“来来灯塔.到底是不是... 有 亲,根据资深记者爆料来来灯塔是可以开挂的,确实有挂(咨询软件无需打开...
【第一财经】“琼雀海南麻将.辅... 网上科普关于“琼雀海南麻将有没有挂”话题很是火热,小编也是针对琼雀海南麻将作*弊开挂的方法以及开挂对...
玩家分享攻略“经典联盟炸金花.... 玩家分享攻略“经典联盟炸金花.有挂吗?”必胜开挂神器您好,经典联盟炸金花这个游戏其实有挂的,确实是有...
今日重大消息“全民牛牛.可以开... 家人们!今天小编来为大家解答全民牛牛透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里买很...