如何测试对象是否是Objective-C中特定类的实例?假设我想查看对象a是b类还是c类的实例,我该如何去做呢?
如何测试对象是否是Objective-C中特定类的实例?假设我想查看对象a是b类还是c类的实例,我该如何去做呢?
Answers:
要测试object是否是a类的实例:
[yourObject isKindOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of
// given class or an instance of any class that inherits from that class.
要么
[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a
// given class.
要获取对象的类名,可以使用NSStringFromClass
function:
NSString *className = NSStringFromClass([yourObject class]);
或来自Objective-C运行时API的C函数:
#import <objc/runtime.h>
/* ... */
const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);
编辑:在斯威夫特
if touch.view is UIPickerView {
// touch.view is of type UIPickerView
}
class_getName
over有NSStringFromClass
什么好处?如果没有,则应调整此答案。
您也可以使用
NSString *className = [[myObject class] description];
在任何NSObject上
Apple文档中的isKindOfClass意味着什么
在由类集群表示的对象上使用此方法时要小心。由于类集群的性质,您获得的对象可能并不总是您所期望的类型。如果调用返回类簇的方法,则该方法返回的确切类型是该对象可以做什么的最好指示。例如,如果某个方法返回一个指向NSArray对象的指针,则不应使用此方法查看数组是否可变,如以下代码所示:
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
如果在代码中使用此类构造,则可能会认为修改实际上不应该修改的对象是可以的。这样做可能会给希望该对象保持不变的其他代码带来问题。
如果要检查特定的班级,则可以使用
if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}
如果您想获取类的名称,只需调用:-
id yourObject= [AnotherClass returningObject];
NSString *className=[yourObject className];
NSLog(@"Class name is : %@",className);