代码之家  ›  专栏  ›  技术社区  ›  James Skidmore

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

  •  525
  • James Skidmore  · 技术社区  · 16 年前

    我需要测试对象是否属于类型 NSString UIImageView . 我怎样才能做到这一点?有什么“异类”方法吗?

    6 回复  |  直到 9 年前
        1
  •  837
  •   Paras Joshi    12 年前

    如果你的目标是 myObject ,然后您要测试它是否是 NSString ,代码为:

    [myObject isKindOfClass:[NSString class]]
    

    同样,如果你想测试 我的对象 对于一个 UIImageView :

    [myObject isKindOfClass:[UIImageView class]]
    
        2
  •  54
  •   return true    9 年前

    你可能会用

    - (BOOL)isKindOfClass:(Class)aClass
    

    这是一种 NSObject .

    有关更多信息,请查看 NSO对象 文档。

    这就是你如何使用它。

    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");    
    }
    
        3
  •  12
  •   Yedy    12 年前

    如果要区分超类和继承类,可以使用:

    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,因为继承的类也是一种超类。

        4
  •  11
  •   Alex Zavatone    9 年前

    运行一个简单的测试,我想我会记录什么工作,什么不工作。我经常看到人们检查对象的类是否是另一个类的成员,或者是否等于另一个类。

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

        5
  •  6
  •   James Zaghini Gandalf    11 年前

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

    // Returns 0 if the object type is equal to double
    strcmp([myNumber objCType], @encode(double)) 
    
        6
  •  4
  •   AMohan    11 年前

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