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



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

 


http://www.niftyadmin.cn/n/1036478.html

相关文章

关于vsomeip移植遇到的困难

之前在ubuntu16上用gcc编译的,可以编译成功并运行 之后用arm-linux-gnueabihf-gcc 9.几版本交叉编译工具链在wsl上编译,可以成功,但是在arm v7上运行显示glic版本太低,把交叉编译 工具链的glibc.so链接过来,又显示gli…

套路解决右侧小于当前数的个数

本文比对leetcode第51题和315题,二者又很大相似性,都可以用归并的思想去做,但也有一些区别。 51题为统计逆序对的个数,先说下具体的思路: 首先,用归并排序的方法,在合并两个数组的时候可以同时…

secure-vsomeip配置方法

Secure-vsomeip配置方法: 在crypto下会生成generated,里面有cerficates和keys,分别对应证书和私钥。 { "unicast" : "192.168.1.107", "logging" : { "level" : "debug", "consol…

排序算法C语言代码

1.快速排序 void quicksort(int* a,int left,int right){if(left>right)return ;int beginleft,endright;int pivotbegin,keya[begin];while(begin<end){while(begin<end&&a[end]>key){end--;}a[pivot]a[end];pivotend;while(begin<end&&a[beg…

C++右值引用和完美转发

1.左值右值区别 下图简要表示了左值和右值的区别 右值&#xff1a;只能在右边的值。 左值&#xff1a;可以在左边的值。 右值不能在左边。 左值也可以在右边。 如下代码表示不同的左右值&#xff1a; int n 1; string s "Hello World"; const flo…

《从零开始学Swift》学习笔记(Day 27)——可选类型

原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客可选类型&#xff1a;我们先看看如下代码&#xff1a;var n1: Int 10n1 nil //编译错误let str: String nil //编译错误Int和String类型不能接受nil的&#xff0c;但程序运行过程中有时被复制给…

C语言实现<冒泡排序>

C语言实现<冒泡排序> 你们好&#xff01;我是飞人&#xff01;此篇文章是我进入IT行业第一篇博客&#xff0c;若有不妥之处&#xff0c;欢迎指点。 此篇讲解冒泡排序的原理&#xff0c;以及如何用C语言去实现。希望能够给各位读者带来一定的认识。 整体思路 例子&…

《从零开始学Swift》学习笔记(Day 28)——总结使用问号(?)和感叹号(!)

原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客在使用可选类型和可选链时&#xff0c;多次使用了问号&#xff08;?&#xff09;和感叹号&#xff08;!&#xff09;&#xff0c;但是它们的含义是不同的&#xff0c;下面我来详细说明一下。 1. 可选类型中的…