如何确定B类是否是A类的子类?

Jor*_*mar 26 objective-c ios

似乎如果您为Mac OS开发,NSObjectisSubclassOfClass方法.但是当我检查同一类的iOS类引用时,它没有该方法(并且Xcode抱怨该方法).

我目前的解决方案是-(void)iAmClassB在那里放一个方法,并执行一个respondsToSelector:iAmClassB,但这似乎是人为的.我错过了什么吗?

Vij*_*com 59

它可以从iOS 2.0及更高版本SDK获得

if ([ClassB isSubclassOfClass:[ClassA class]]) {


    NSLog(@"yes ClassB is SubclassOfClass of ClassA");

}       
Run Code Online (Sandbox Code Playgroud)

文件:

isSubclassOfClass:

返回一个布尔值,指示接收类是否是给定类的子类或相同.

   + (BOOL)isSubclassOfClass:(Class)aClass
Run Code Online (Sandbox Code Playgroud)

参数

一类

一个类对象.

回报价值

YES如果接收类是 - 或相同的子类aClass,否则NO.

可用性

适用于iOS 2.0及更高版本.


Yuj*_*uji 5

id a= ...;
if([a isKindOfClass:[A class]]){
     ...
}
Run Code Online (Sandbox Code Playgroud)

应该做的工作.你很少需要看看它是否真的是一个类.看到这里.

  • 我认为您误解了此方法的名称。`isKindOfClass:` 仍然会告诉你它是否真的是一个子类,它只是对一个对象实例而不是一个 `Class` 对象进行操作。也就是说,`if ([a isKindOfClass:A.class])` 与 `if (a.class == A.class || [a.class isSubclassOfClass:A.class])` 的作用相同。_(为了清晰起见,点语法;假设使用 iOS 8 版本的 NSObject 协议。)_ (2认同)