美文网首页iOS技术分享程序员iOS Developer
Swift-自省(判断对象属于什么)

Swift-自省(判断对象属于什么)

作者: it_hao528 | 来源:发表于2017-08-23 11:50 被阅读672次
我是谁.jpeg

前言:向一个对象发出询问,以确定它是不是属于某个类,这种操作就称为自省。前段时间使用 Swift 时常遇到一个判断对象属于哪个类的情况,使用 Objective-C 的语法没有解决,于是就找了度娘终于解决了问题。正所谓好东西大家一起分享才会最大化体现出该好东西的价值,今天值此机会给大家分享一下我总结的内容。

首先来看一下在 Objective-C 中常用的判断一个对象是属于哪个类的方法有下面两类:

[obj1 isKindOfClass:[ClassA class]];
[obj2 isMemberOfClass:[ClassB class]];

-isKindOfClass: 判断obj1是否是ClassA或者其子类的实例对象;
-isMemberOfClass:obj2做出判断,当且仅当obj2的类型为ClassB时返回为真。

以上这两个方法是NSObject的方法,所以我们在 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

在 Swift 中提供了一个更简洁的写法:对于一个不确定的类型,我们可以使用is来进行判断。is在功能上相当于原来的isKindOfClass,可以检查一个对象是否属于某类型或其子类型。is和原来的区别主要在于它不仅可以用于class类型上,也可以对 Swift 的其他像是structenum类型进行判断。如下:

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 {
    // 
}

OK,到此结束了。内容不是很多,不过还是希望能够帮助到有需要的朋友。愿我们能够共同学习进步,在开发的道路上越走越远!谢谢!

相关文章

  • Swift-自省(判断对象属于什么)

    前言:向一个对象发出询问,以确定它是不是属于某个类,这种操作就称为自省。前段时间使用 Swift 时常遇到一个判断...

  • Python自省

    参考自廖雪峰的Python教程 Python自省-------在运行时能够获得对象的类型 type(),判断对象类...

  • ruby类总结

    类 1.new 实例化对象 3. .class查看对象属于哪个类 4. instance_of? 判断对象是否属于...

  • 判断是否为数组的6种方法

    instanceof 运算符 , 主要是判断某个实例(arr)是否属于某个对象 constructor 判断实例(...

  • instanceof、final关键字

    instanceof关键字 作用:判断一个对象是否属于指定的类型 instanceof关键字的使用前提:判断的对象...

  • iOS复习之重写与重载

    iOS面向对象的三大特征 封装、继承、多态 Swift-重写与重载的使用和比较

  • instanceof,final关键字

    instanceof关键字:判断一个对象是否属于指定的类别 使用前提: 判断的对象和指定的类别存在继承或者实现关系...

  • this

    在函数执行时,this 总是指向调用该函数的对象。要判断 this 的指向,其实就是判断 this 所在的函数属于...

  • iOS中isKindOfClass,isMemberOfClas

    -(BOOL)isKindOfClass用来判断某个对象是否属于某个类,或者是属于某个派生类。 -(BOOL)is...

  • 20170811

    ##### 循环对象自身的属性 instanceof 用于判断引用类型属于哪个构造函数的方法 如何准确判断一个变量...

网友评论

    本文标题:Swift-自省(判断对象属于什么)

    本文链接:https://www.haomeiwen.com/subject/gtpdkxtx.html