在Objective-C中,我如何testing对象types?
我需要testing对象是NSString
types还是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不好的数据,可以是NSArray
, NSDictionary
或(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 { ... }