在Objective-C中,如何测试对象类型?

时间:2009-07-17 17:19:35

标签: ios objective-c

我需要测试对象是NSString还是UIImageView类型。我怎么能做到这一点?是否有某种类型的“isoftype”方法?

6 个答案:

答案 0 :(得分:845)

如果您的对象为myObject,并且您想测试它是否为NSString,则代码为:

[myObject isKindOfClass:[NSString class]]

同样,如果您想测试myObject的{​​{1}}:

UIImageView

答案 1 :(得分:55)

您可能会使用

- (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");    
}

答案 2 :(得分:13)

如果想要在superClass和inheritedClass之间有所不同,可以使用:

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也是一种superClass。

答案 3 :(得分:11)

运行一个简单的测试,我想我会记录哪些有效,哪些无效。通常我会看到人们检查对象的类是否是另一个类的成员或者是否等于另一个类。

对于下面一行,我们有一些格式不正确的数据,可以是NSArrayNSDictionary(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没有。

答案 4 :(得分:6)

如果要检查原始数据类型的类型,可以使用以下代码。

// Returns 0 if the object type is equal to double
strcmp([myNumber objCType], @encode(double)) 

答案 5 :(得分:4)

简单,[yourobject class]它将返回yourobject的类名。