《從零開始學Swift》學習筆記(Day 26)——可選鏈

原創文章,歡迎轉載。轉載請註明:關東昇的博客php

 

Swift程序表達式中會看到問號(?)和感嘆號(!),它們表明什麼含義呢?這些符號都與可選類型和可選鏈相關,下面來看看可選鏈。 java

可選鏈:微信

類圖:網站

它們之間是典型的關聯關係類圖。這些類通常都是實體類,實體類是系統中的人、事、物。Employee經過dept屬性與Department關聯,Department經過comp屬性與Company關聯。spa

下面看示例代碼:設計

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實例)。code

給定一個Employee實例,必定會有一個Department與其關聯。但現實是一個新入職員工未必有部門,這種關聯關係有可能有值,也有可能沒有值,咱們須要使用可選類型(Department?)聲明dept屬性。教程

修改代碼以下:get

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_關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
 
更多精品iOSCocos、移動設計課程請關注智捷課堂官方網站:
http://www.zhijieketang.com
智捷課堂論壇網站:
http://51work6.com/forum.php

相關文章
相關標籤/搜索