我需要测试对象的类型是NSString
还是UIImageView
。我该怎么做?是否有某种“ isoftype”方法?
我需要测试对象的类型是NSString
还是UIImageView
。我该怎么做?是否有某种“ isoftype”方法?
Answers:
如果您的对象是myObject
,并且要测试以查看它是否是NSString
,则代码将是:
[myObject isKindOfClass:[NSString class]]
同样,如果你想考myObject
的UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
您可能会使用
- (BOOL)isKindOfClass:(Class)aClass
这是一种方法NSObject
。
有关更多信息,请查阅NSObject
文档。
这就是您的用法。
BOOL test = [self isKindOfClass:[SomeClass class]];
您也可以尝试做这样的事情
for(id element in myArray)
{
NSLog(@"=======================================");
NSLog(@"Is of type: %@", [element className]);
NSLog(@"Is of type NSString?: %@", ([[element className] isMemberOfClass:[NSString class]])? @"Yes" : @"No");
NSLog(@"Is a kind of NSString: %@", ([[element classForCoder] isSubclassOfClass:[NSString class]])? @"Yes" : @"No");
}
className
,它可能会在OS X上运行,也可能无法在OS X上运行,但它不在iOS中,并且不打算用于此目的。而且,这些功能NSLog
并没有按照我想您的意思执行—它们奇怪地是在检查类名称(始终是字符串)和编码器类,而不是实际元素的类。
NSLog(@"Is of type: %@", [element class]);
适用于iOS 7
如果要在超类和继承的类之间进行区分,可以使用:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
- (BOOL)isKindOfClass:(Class)aClass
在这种情况下使用将导致两次都为TRUE,因为InheritedClass也是超类的一种。
isMemberOfClass:
NO
在处理子类时将返回。
运行一个简单的测试,我以为我要记录什么有效,什么无效。我经常看到人们在检查该对象的类是否是另一个类的成员或等于另一个类。
对于下面的行,我们有一些格式不正确的数据,可以是NSArray
,NSDictionary
或(null)
。
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
这些是执行的测试:
NSLog(@"%@", [hits class]);
if ([hits isMemberOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
isKindOfClass
工作得很好,而isMemberOfClass
没有。
很简单,[您的对象类]它将返回您的对象的类名称。
Class
对象。但是,description
此对象的将作为字符串的类名称,因此您仍然可以将其记录到控制台。
[object isKindOfClass:[ClassName class]]