您好,登錄后才能下訂單哦!
原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請注明:關(guān)東升的博客
在Swift程序表達式中會看到問號(?)和感嘆號(!),它們代表什么含義呢?這些符號都與可選類型和可選鏈相關(guān),下面來看看可選鏈。
可選鏈:
類圖:
它們之間是典型的關(guān)聯(lián)關(guān)系類圖。這些類一般都是實體類,實體類是系統(tǒng)中的人、事、物。Employee通過dept屬性與Department關(guān)聯(lián),Department通過comp屬性與Company關(guān)聯(lián)。
下面看示例代碼:
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實例,形成一個引用的鏈條,但是這個“鏈條”任何一個環(huán)節(jié)“斷裂”都無法引用到最后的目標(biāo)(Company實例)。
給定一個Employee實例,一定會有一個Department與其關(guān)聯(lián)。但現(xiàn)實是一個新入職員工未必有部門,這種關(guān)聯(lián)關(guān)系有可能有值,也有可能沒有值,我們需要使用可選類型(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)
但是顯示拆包有一個弊端,如果可選鏈中某個環(huán)節(jié)為nil,將會導(dǎo)致代碼運行時錯誤。我們可以采用更加“溫柔”的引用方式,使用問號(?)來代替原來感嘆號(!)的位置,如下所示:
print(emp.dept?.comp?.name)
歡迎關(guān)注關(guān)東升新浪微博@tony_關(guān)東升。
關(guān)注智捷課堂微信公共平臺,了解最新技術(shù)文章、圖書、教程信息
更多精品iOS、Cocos、移動設(shè)計課程請關(guān)注智捷課堂官方網(wǎng)站:http://www.zhijieketang.com
智捷課堂論壇網(wǎng)站:http://51work6.com/forum.php
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。