Paste_Image.png
在編寫代碼時,經(jīng)常碰到我創(chuàng)建的某個對象是否是某個類或者屬于某個枚舉暴区,在Swift中可以使用isMember紧武,isKind和is用來判斷
1晌畅、isMember用來判斷該對象是否為指定類的對象
2偏形、isKind 用來判斷該對象是否為指定類或者指定類的子類的對象
3静袖、is用法與isKind類型,上面兩種只能用于類對象的判斷俊扭,對于枚舉和結(jié)構(gòu)體同樣適用
示例:
<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>
對于結(jié)構(gòu)體或者枚舉類型,不能使用繼承庸蔼,也就不能有子類的說法解总,但是可以實現(xiàn)某個協(xié)議,因此可以用is判斷某個枚舉或者結(jié)構(gòu)體是否實現(xiàn)了某個協(xié)議朱嘴,對于枚舉或者結(jié)構(gòu)體之間的判斷倾鲫,使用is是沒有必要的
Paste_Image.png
結(jié)論:
對于普通的類、結(jié)構(gòu)體萍嬉、枚舉是否屬于的判斷乌昔,可以使用is,如果有特殊的需求壤追,需要判斷某個類是否為特定的類磕道,就使用isMember