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

简介: <div style="top: 0px;"></div><span style="font-family:宋体;font-size:14px;"></span><p style="margin: 0cm 0cm 0pt;"><span style="font-size:14px;"><strong style="mso-bidi-font-weight: normal;"><span


Swift2.0学习笔记(Day 26)——可选链

 

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

 

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

 

可选链:

类图:

它们之间是典型的关联关系类图。这些类一般都是实体类,实体类是系统中的人、事、物。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_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 http://www.zhijieketang.com/files/default/2015/09-28/110238ef41e1688449.png?6.4.1

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

 

目录
相关文章
|
消息中间件
USB设备的Bulk模式驱动程序设计
USB设备的Bulk模式驱动程序设计     引言   通用串行总线(USB)是一种串行接口,具有自动配置能力和良好的兼容性,从而简化了计算机与外设的连接,被计算机外设硬件制造商广泛采纳。
1386 0
|
安全 数据安全/隐私保护 Windows
数据安全的守护者:备份工具和恢复方法详解
数据安全的守护者:备份工具和恢复方法详解
750 7
|
机器学习/深度学习 人工智能 自然语言处理
基于星海智算云平台部署 DeepSeek-R1系列 70b 模型全攻略(附平台福利)
本文介绍了如何在星海智算云平台上部署DeepSeek-R1系列70B模型,解决官网访问不畅的问题。通过云端部署,用户可以按需付费,避免本地部署高昂成本(高达两百多万)。文章详细讲解了从实例创建到开始使用DeepSeek的八个步骤,并提供了成本优化技巧和新手注意事项。推荐使用双A100显卡,每小时费用仅13.32元。新用户还可领取福利,享受高性价比服务。立即注册体验:[星海智算云平台](https://gpu.spacehpc.com/user/register?inviteCode=52872508)。
1367 1
基于星海智算云平台部署 DeepSeek-R1系列 70b 模型全攻略(附平台福利)
|
7月前
|
运维 安全 Linux
新手如何安装1Panel
博主分享使用MobaXterm安装1Panel运维面板的完整图文教程。相比宝塔,1Panel开源、现代化且更安全,支持容器化管理。教程涵盖服务器选购、SSH登录、系统设置及一键安装全过程,操作简单,新手友好,无需注册账号,隐私更安全,是Linux服务器管理的理想选择。
430 4
|
JavaScript 前端开发 Java
谈一谈 OpenHarmony 的方舟编译体系
谈一谈 OpenHarmony 的方舟编译体系
|
PyTorch 区块链 算法框架/工具
Polygon马蹄链(Matic)开发说明丨Polygon马蹄链(Matic)智能合约系统开发(详细功能)丨Polygon马蹄链(Matic)系统源码
Matic PoS Chain,官方称之为“提交链”(commit chain)。它不同于侧链,尽管Matic PoS Chain有自己的共识机制,但在验证节点staking和检查点方面,它也依赖于以太坊的安全性。它与以太坊链并行运行,且该链由具有自身验证节点的权益证明共识机制来保护,保证了它的去中心化特性。此外,Matic PoS Chain与以太坊虚拟机(EVM)兼容,那些基于以太坊的项目可便捷地迁移其智能合约至Matic PoS链上。
|
安全 Shell Linux
PowerShell攻击指南
PowerShell攻击指南
692 0
|
JavaScript 前端开发 API
|
机器学习/深度学习 Linux 虚拟化
ARM ASID/VMID 编程接口
提问一般来说,我们使用ASID来标识进程的ID, 使用VMID来标识虚拟机ID,那么具体CPU/加速器/PCIe发起的一次操作,如何从硬件角度识别,并透传到后续模块呢?即如何标识不同的流?软硬件的编程接口是如何配合的?CPU视角ASID 首先,站在CPU视角,CPU通过TTBR0/TTBR1来控制不同EL等级下的内存域。当CPU下发操作的时候,通过访问地址的VA,确定当前应该使用TTBR0还是TT
2090 0
ARM ASID/VMID 编程接口
|
SQL Oracle 关系型数据库
数据库管理工具:全网最全,MySQL 数据库图形化管理界面应用 Navicat Premium 使用教程
数据库管理工具:全网最全,MySQL 数据库图形化管理界面应用 Navicat Premium 使用教程
566 0
数据库管理工具:全网最全,MySQL 数据库图形化管理界面应用 Navicat Premium 使用教程

热门文章

最新文章