Swift isMember isKind is的使用

Paste_Image.png
在编写代码时,经常碰到我创建的某个对象是否是某个类或者属于某个枚举,在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是没有必要的


Paste_Image.png
结论:

对于普通的类、结构体、枚举是否属于的判断,可以使用is,如果有特殊的需求,需要判断某个类是否为特定的类,就使用isMember

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,220评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,923评论 1 10
  • 132.转换错误成可选值 通过转换错误成一个可选值,你可以使用 try? 来处理错误。当执行try?表达式时,如果...
    无沣阅读 1,307评论 0 3
  • 早春的时候,有一天黄昏,我带着马扎出门散步,听到一群老狗在讨论。“嗨,想不到……也真够惨的……你说……”我赶紧凑了...
    佘玺阅读 563评论 1 1