当我将对象发送到NSLog时,我得到一个包含三个属性的字符串。第一个是对象的类,第二个是对象的框架,第三个是对象的CALayer。第二个和第三个属性标题为(例如layer =),因此我可以通过标题调用它们(例如myObject.layer)。
第一个不是。我如何测试班级类型?
谢谢!
答案 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
适用于类原型,虽然我无法轻易找到它的文档。)