用「可選鏈」而不用「強制解包」

2021-09-26 11:00:46 字數 1504 閱讀 7986

用「可選鏈」而不用「強制解包」

class

person

class

residence

兩個類「person」和「residence「,現在假如我建立了乙個新的person例項,他的residence屬性因為是可選值,所以被初始化為nil,如下

let john =

person()

//此時john的residence屬性為nil

如果這時使用感嘆號( ! )強制解包numberofroomes會因為residence的值為nil而崩潰。

let aerrorexample = john.residence!

.numberofrooms//執行時會報錯

為此,可選鏈式呼叫提供了另一種訪問numberofrooms的方式,使用( ? )來代替原來的感嘆號( ! )

if

let roomcount = john.residence?

.numberofrooms

else

字尾問號( ? )的作用是在該值不為nil 的情況下訪問,記住上面這種寫法,你可能會經常遇到if let *** = ***這種形式

訪問失敗(值為nil)時則返回

class

person

class

residence

class

room

}//subscript是下標的意思:傳入乙個下標數字,返回需要的那個房間

subscript

(i:int)-

>

room

set}

func

printnumberofrooms()

var address:

address

?}

仔細看下**!其中address類會在下方給出,其他應該都能看懂

class

address

else

iflet buildingnumber = buildingnumber,

let street = street

else

}}

可以看出address類中含有大量的可選值,buildingid提供了乙個用來表示某個建築方法:如果它有名字那直接返回名字,如果它沒名字,那就看看它是否同時擁有buildnumber和street,有則返回乙個拼接的字串沒有則返回nil

仔細看看黃字是怎麼實現的 ! ! !

let john =

person()

iflet roomcount = john.residence?

.numberofrooms

else

我們對john已經進行了初始化所以residence存在了就可以訪問的到

Item2 用而不用

item2 用而不用 prefer to type safety and extensibility weaknesses of printf scanf are the strengths of operator and operator int i rational r r is a ratio...

為什麼用VUE,而不用Jquery了?

在沒有任何前端框架之前,我們寫 只能用原生的js,進行資料的處理,dom的操作,譬如對乙個id 為txtname 的文字框進行賦值,我們是這樣的 document.getelementbyid txtname value 張三 當然這還僅僅是針對通過id獲取dom 現實開發中還有其它的各種操作,當然...

我為什麼用Android 手機而不用 iPhone

最重要的因素肯定是 android大部分的市場份額還是千元幾或者兩千多的機子撐起來的。像我這種學生階段的iphone的 實在太高。android這麼低的入門門檻決定了它的市場份額肯定會很好看。android系統的開源使得玩機的空間很大,熱門機型隨意一搜連rom都能有上千個。有個笑話說android使...