一: swift類型轉化的四種操作
Swift是強類型語言,但也允許開發(fā)者通過is、as、as?和as!這四種操作來對類型進行判斷和強制轉換。其中is用作類型判斷,而as?和as!則分別是類型轉換的可選形式和強制形式。swift中比較常用的向下轉換(downcast)是沒有as操作符的,但是,如果現(xiàn)在有一個Dog類他的父類是一個Animal類,可以通過as將一個Dog類轉化為Animal類.
為了方便后面的解釋,這里假設定義了三個類,Animal、Dog和Cat,其中Dog和Cat都繼承自Animal。
二: is操作符
is操作用來判斷某一個對象是否是某一個特定的類,它會返回一個bool類型的值。is操作的邏輯很簡單,某一個類的對象肯定是自己這個類,也一定是自己的超類,但超類的對象不是子類。如果兩個類沒有繼承關系,那is操作一定返回false.
如下:
if Dog is Animal {
print("這是個小狗")
}
if Cat is Animal{
print("這是個小貓")
}
if Animal is Cat {
print("動物是一個貓")? // 這種判斷顯然不能成立,返回的是一個false
}
注意: 以上這種使用is做判斷,返回一個bool類型的結果,判斷一個類是不是另外一個類的類型,就相當于我們在OC里面用到的isKindOfClass去判斷一樣
三: as轉化
使用as轉化,只能將一個子類轉化成一個父類(或者超類),反過來不能轉化成功
四:as!操作符
as!操作符是類型轉換的強制格式,優(yōu)點在于代碼簡單,如果可以轉換,則會返回轉換了格式的對象,如果無法轉換就會拋出運行時錯誤。因此除非百分之百確定可以轉換,否則不應該使用as!來進行強制類型轉換,易造成程序crash。
五:as?操作符
as?和as!操作符的轉換規(guī)則完全一樣,但是as?會返回一個被轉換類型的可選類型,需要我們解封。因為可選類型即使值不存在轉化失敗也不會導致程序報錯,所以當我們在開發(fā)的時候最好使用這種方式進行轉化,除非我們有百分之百的把握才可以使用強制轉化