Swift-自仕苎隆(判斷對象屬于什么)

我是誰.jpeg

前言:向一個(gè)對象發(fā)出詢問文黎,以確定它是不是屬于某個(gè)類惹苗,這種操作就稱為自省。前段時(shí)間使用 Swift 時(shí)常遇到一個(gè)判斷對象屬于哪個(gè)類的情況耸峭,使用 Objective-C 的語法沒有解決桩蓉,于是就找了度娘終于解決了問題。正所謂好東西大家一起分享才會最大化體現(xiàn)出該好東西的價(jià)值劳闹,今天值此機(jī)會給大家分享一下我總結(jié)的內(nèi)容院究。

首先來看一下在 Objective-C 中常用的判斷一個(gè)對象是屬于哪個(gè)類的方法有下面兩類:

[obj1 isKindOfClass:[ClassA class]];
[obj2 isMemberOfClass:[ClassB class]];

-isKindOfClass: 判斷obj1是否是ClassA或者其子類的實(shí)例對象;
-isMemberOfClass:obj2做出判斷本涕,當(dāng)且僅當(dāng)obj2的類型為ClassB時(shí)返回為真业汰。

以上這兩個(gè)方法是NSObject的方法,所以我們在 Swift 中如果寫的是NSObject的子類的話菩颖,直接使用這兩個(gè)方法是沒有任何問題的样漆,如下:

class ClassA: NSObject { }
class ClassB: ClassA { }

let obj1: NSObject = ClassB()
let obj2: NSObject = ClassB()

obj1.isKindOfClass(ClassA.self)    // true
obj2.isMemberOfClass(ClassA.self)  // false

在 Swift 中提供了一個(gè)更簡潔的寫法:對于一個(gè)不確定的類型,我們可以使用is來進(jìn)行判斷晦闰。is在功能上相當(dāng)于原來的isKindOfClass放祟,可以檢查一個(gè)對象是否屬于某類型或其子類型。is和原來的區(qū)別主要在于它不僅可以用于class類型上鹅髓,也可以對 Swift 的其他像是structenum類型進(jìn)行判斷舞竿。如下:

class ClassA { }
class ClassB: ClassA { }

let obj: AnyObject = ClassB()

if (obj is ClassA) {
    print("obj 屬于 ClassA")
}

if (obj is ClassB) {
    print("obj 屬于 ClassB")
}

另外,編譯器將對這種檢查進(jìn)行必要性的判斷:如果編譯器能夠唯一確定類型窿冯,那么is的判斷就沒有必要骗奖,編譯器將會拋出一個(gè)警告,來提示你并沒有轉(zhuǎn)換的必要醒串。如下:

let string = "String"
if string is String {
    // 
}

OK执桌,到此結(jié)束了。內(nèi)容不是很多芜赌,不過還是希望能夠幫助到有需要的朋友仰挣。愿我們能夠共同學(xué)習(xí)進(jìn)步,在開發(fā)的道路上越走越遠(yuǎn)缠沈!謝謝膘壶!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末错蝴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颓芭,更是在濱河造成了極大的恐慌顷锰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亡问,死亡現(xiàn)場離奇詭異官紫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)州藕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門束世,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人床玻,你說我怎么就攤上這事毁涉。” “怎么了锈死?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵薪丁,是天一觀的道長。 經(jīng)常有香客問我馅精,道長严嗜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任洲敢,我火速辦了婚禮漫玄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘压彭。我一直安慰自己睦优,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布壮不。 她就那樣靜靜地躺著汗盘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪询一。 梳的紋絲不亂的頭發(fā)上隐孽,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音健蕊,去河邊找鬼菱阵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缩功,可吹牛的內(nèi)容都是我干的晴及。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼嫡锌,長吁一口氣:“原來是場噩夢啊……” “哼虑稼!你這毒婦竟也來了琳钉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蛛倦,失蹤者是張志新(化名)和其女友劉穎槽卫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胰蝠,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年震蒋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茸塞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡查剖,死狀恐怖钾虐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笋庄,我是刑警寧澤效扫,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站直砂,受9級特大地震影響菌仁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜静暂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一济丘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洽蛀,春花似錦摹迷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驮审,卻和暖如春鲫寄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疯淫。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工塔拳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人峡竣。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓靠抑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親适掰。 傳聞我的和親對象是個(gè)殘疾皇子颂碧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉荠列,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,686評論 0 9
  • 章節(jié)導(dǎo)航:Swift開發(fā)指南:使用Swift與Cocoa和Objective-C(Swift 4) - 1.入門S...
    Minecode閱讀 3,182評論 0 23
  • Swift2.0 1.defer譯為延緩、推遲之意類似棧 注意作用域载城,其次是調(diào)用順序——即一個(gè)作用域結(jié)束(注意)肌似,...
    zeqinjie閱讀 3,373評論 0 50
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件诉瓦、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • 姓名:嚴(yán)露露 公司:寧波大發(fā)化纖有限公司 《六項(xiàng)精進(jìn)》289期反省一組學(xué)員 【日精進(jìn)打卡第21天】 【知~學(xué)習(xí)】 ...
    嚴(yán)露露閱讀 166評論 0 0