测试类类型

时间:2009-06-25 13:32:17

标签: iphone objective-c

当我将对象发送到NSLog时,我得到一个包含三个属性的字符串。第一个是对象的类,第二个是对象的框架,第三个是对象的CALayer。第二个和第三个属性标题为(例如layer =),因此我可以通过标题调用它们(例如myObject.layer)。

第一个不是。我如何测试班级类型?

谢谢!

3 个答案:

答案 0 :(得分:10)

要获取对象的类,只需调用[myObject class]即可。您可以将其与所需的类进行比较,如下所示:

if ([myObject class] == [SomeClass class]) { /* ... */ }
if ([myObject class] == [NSString class]) { /* ... */ }

如果您只是将类名称作为字符串查找,则可以使用NSStringFromClass函数,如下所示:

NSString * className = NSStringFromClass([myObject class]);

答案 1 :(得分:7)

如果您还想要包含目标类使用的子类:

[object isKindOfClass:[SomeClass class]]

答案 2 :(得分:3)

@eJames @Diederik 都是正确的。但是,还有一些其他选择,根据您的口味,其中一些可能更合适。

例如,您可以使用-isMemberOfClass:排除子类,而不是测试类对象的相等性,而-isKindOfClass:-isSubclassOfClass:则不会。 (这绝对是一种选择对某些人来说比其他人更直观的情况。)

此外, [SomeClass className] [anObject className] 是将类名称设为NSString的简便方法。 (我知道-className是在NSObject上定义的,+className适用于类原型,虽然我无法轻易找到它的文档。)