在编写代码时,经常碰到我创建的某个对象是否是某个类或者属于某个枚举,在Swift中可以使用isMember,isKind和is用来判断
1、isMember用来判断该对象是否为指定类的对象
2、isKind 用来判断该对象是否为指定类或者指定类的子类的对象
3、is用法与isKind类型,上面两种只能用于类对象的判断,对于枚举和结构体同样适用
示例:
<pre>
class A: NSObject {}
class B: A {}
func doTest() {
let cla = A()
let clb = B()
cla.isMember(of: A.self) // true
cla.isKind(of: A.self) // true
clb.isMember(of: A.self) // false
clb.isKind(of: A.self) // true
clb.isMember(of: B.self) // true
cla is A // true 对于这种确定的类型,会报警告
cla is B // false
clb is A // true
clb is B // true
}
</pre>
对于非NSObject类,需要在对象定义时指定为AnyObject类型,因为普通类型没有isMember方法,写法如下
<pre>
let cla: AnyObject = A()
let clb: AnyObject = B()
</pre>
对于结构体或者枚举类型,不能使用继承,也就不能有子类的说法,但是可以实现某个协议,因此可以用is判断某个枚举或者结构体是否实现了某个协议,对于枚举或者结构体之间的判断,使用is是没有必要的
结论:
对于普通的类、结构体、枚举是否属于的判断,可以使用is,如果有特殊的需求,需要判断某个类是否为特定的类,就使用isMember