1.Objective-C 中常用的判斷一個對象是屬於哪個類的方法有下面兩類:
[obj1 isKindOfClass:[ClassA class]]; [obj2 isMemberOfClass:[ClassB class]];
結論:
-isKindOfClass:
判斷obj1
是否是ClassA
或者其子類的實例對象;-isMemberOfClass:
對obj2
做出判斷,當且僅當obj2
的類型為ClassB
時返回為真
在 Swift 中如果寫的是NSObject
的子類的話
class ClassA: NSObject { } class ClassB: ClassA { } let obj1: NSObject = ClassB() let obj2: NSObject = ClassB() obj1.isKindOfClass(ClassA.self) // true obj2.isMemberOfClass(ClassA.self) // false
2.在 Swift 中提供了一個更簡潔的寫法:對於一個不確定的類型,我們可以使用is
來進行判斷。is
在功能上相當於原來的isKindOfClass
,可以檢查一個對象是否屬於某類型或其子類型。is
和原來的區別主要在於它不僅可以用於class
類型上,也可以對 Swift 的其他像是struct
或enum
類型進行判斷。如下:
class ClassA { } class ClassB: ClassA { } let obj: AnyObject = ClassB() if (obj is ClassA) { print("obj 屬於 ClassA") } if (obj is ClassB) { print("obj 屬於 ClassB") }
另外,編譯器將對這種檢查進行必要性的判斷:如果編譯器能夠唯一確定類型,那么is
的判斷就沒有必要,編譯器將會拋出一個警告,來提示你並沒有轉換的必要。如下:
let string = "String" if string is String { // }
by:liming