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