在Objective-C中,我如何testing对象types?

我需要testing对象是NSStringtypes还是UIImageView 。 我怎样才能做到这一点? 是否有某种types的“isoftype”方法?

如果你的对象是myObject ,并且你想testing它是否是一个NSString ,那么代码是:

 [myObject isKindOfClass:[NSString class]] 

同样,如果你想testing一个UIImageView myObject

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

当你想在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- (BOOL)isKindOfClass:(Class)aClass都会导致TRUE,因为inheritedClass也是一种superClass。

运行一个简单的testing,我想我会logging什么是有效的,什么不能。 通常我会看到人们检查对象的类是否是其他类的成员,或者是否与其他类相同。

对于下面的行,我们有一些forms不好的数据,可以是NSArrayNSDictionary(null)

 NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"]; 

这些是执行的testing:

 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没有。

您可以使用以下代码来检查原始数据types的types。

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

简单,[yourobject类]它将返回你的对象的类名称。

用Swift 2.0,你可以用is运算符;

 if myVariable is kindOfClass { ... } 

例如,您正在寻找一种UITextView,并了解您的视图子视图中的哪个索引。

 for subView in view.subviews where subView is UITextView { ... }