首先我們定義幾個(gè)這樣的類型:
class People {
}
class Man: People {
}
class Woman: People {
}
這里沒有設(shè)置任何屬性和方法,只是驗(yàn)證各個(gè)元素的類型,然后定義一個(gè)數(shù)組:
let items: [People] = [Man.init(),Woman.init(),Man.init(),Woman.init(),Man.init(),Woman.init()]
1. 類型檢查關(guān)鍵字: is
需要判斷的對(duì)象 is 需要判斷的類型
使用非常簡單,例如這里判斷上面的數(shù)組items[0]的類型:
items[0] is Man
items[0] is Woman
結(jié)果:

2. 類型轉(zhuǎn)換關(guān)鍵字: as
類型轉(zhuǎn)換一般是將披著父類外衣的子類對(duì)象轉(zhuǎn)換為實(shí)際的子類,即往下轉(zhuǎn)換
2.1. as?
如果不能保證,類型轉(zhuǎn)換一定成功,可使用as?關(guān)鍵字:

需要注意的是這里的類型轉(zhuǎn)換是嘗試將元素轉(zhuǎn)換為指定類型,成功,則轉(zhuǎn)換為指定類型的可選型(即: 這里的man是Man的可選型),失敗,則賦值nil(這里的woman為nil)
2.2. as!
如果確定,待轉(zhuǎn)換的對(duì)象一定是某個(gè)類型,可使用as!進(jìn)行轉(zhuǎn)換:

當(dāng)然,如果不是要轉(zhuǎn)換的類型,就會(huì)編譯報(bào)錯(cuò):

所以,在使用as!時(shí),一定要保證所轉(zhuǎn)換的元素一定是要轉(zhuǎn)換的類型,不然,就會(huì)報(bào)錯(cuò);如果不能確定,那就使用as?吧.
檢查對(duì)象是否遵循某協(xié)議
is關(guān)鍵字還可以用于檢查某對(duì)象是否遵循了某協(xié)議,用法和是否是某類型一樣,只不過is后面跟的是協(xié)議名稱,不再是類名:
某對(duì)象 is 某協(xié)議
同理,使用as關(guān)鍵字,可以將對(duì)象轉(zhuǎn)換為遵守某子協(xié)議,用法和類型轉(zhuǎn)換類似
與Objective-C對(duì)象的轉(zhuǎn)換
Swift中的類可以轉(zhuǎn)換為OC的相應(yīng)類,例如String轉(zhuǎn)換為NSString:
