频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
Swift 2.0学习笔记(Day 26)——可选链
2015-10-26 10:03:00         来源:关东升  
收藏   我要投稿

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

 

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

 

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

 

可选链:

类图:

data-cke-saved-src=/uploadfile/Collfiles/20151024/20151024093423125.png

它们之间是典型的关联关系类图。这些类一般都是实体类,实体类是系统中的人、事、物。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)

 

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 笔记
上一篇:Volley框架缓存过大导致oom
下一篇:图像滤镜艺术---Photoshop实现Instagram之Nashville滤镜
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站