isKind 用來判斷該對(duì)象是否為指定類或者指定類的子類的對(duì)象;而isMember 用來判斷該對(duì)象是否為指定類的對(duì)象
這兩個(gè)方法是 NSObject 的方法垫毙,所以我們?cè)?Swift 中如果寫的是 NSObject 的子類的話霹疫,直接使用這兩個(gè)方法是沒有任何問題的:
class ClassA: NSObject { }
class ClassB: ClassA { }
let obj1 = ClassB()
let obj2 = ClassB()
obj1.isKind(of: ClassA.self) // true
obj2.isMember(of: ClassA.self) // false
在 Objective-C 中幾乎所有的類都會(huì)是 NSObject 的子類,而在 Swift中如果類不是NSObject的子類時(shí),怎么確定其類型呢?
class ClassA { }
class ClassB: ClassA { }
let obj1: AnyObject = ClassB()
let obj2: AnyObject = ClassB()
obj1.isKind(of: ClassA.self) // true
obj2.isMember(of: ClassA.self) // false
為了快速確定類型综芥,Swift 提供了一個(gè)簡(jiǎn)潔的寫法:對(duì)于一個(gè)不確定的類型丽蝎,我們現(xiàn)在可以使用 is 來進(jìn)行判斷。is在功能上相當(dāng)于isKind,
不同的是它不僅可以用于class類型上,也可以用于Swift的其他類型,如struct活enum上
另外屠阻,編譯器將對(duì)這種檢查進(jìn)行必要性的判斷:如果編譯器能夠唯一確定類型红省,那么 is 的判斷就沒有必要,編譯器將會(huì)拋出一個(gè)警告国觉,來提示你并沒有轉(zhuǎn)換的必要吧恃。
let string = "String"
if string is String {
// Do something
}
// 'is' test is always true