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
