我需要测试对象的类型是否为NSString或UIImageView。我怎样才能做到呢?是否存在某种类型的“isoftype”方法?
如果你的对象是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");
}
运行一个简单的测试,我想我应该记录哪些有效,哪些无效。我经常看到人们检查对象的类是否属于另一个类,或者是否等于另一个类。
对于下面这行,我们有一些格式很差的数据,可以是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没有。
当你想要区分父类和继承类时,你可以使用:
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也是一种超类。
如果您想检查基本数据类型的类型,可以使用以下代码。
// Returns 0 if the object type is equal to double
strcmp([myNumber objCType], @encode(double))
推荐文章
- 以编程方式创建segue
- 在Objective-C中@synchronized如何锁定/解锁?
- Xcode构建失败“架构x86_64未定义的符号”
- 动态改变UILabel的字体大小
- registerForRemoteNotificationTypes: iOS 8.0及以上版本不支持
- 新的自动引用计数机制是如何工作的?
- 如何测试对象在Objective-C中的类?
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?
- 从Cocoa应用程序执行一个终端命令
- Swift编译器错误:“框架模块内的非模块化头”
- 从父iOS访问容器视图控制器
- 自定义dealloc和ARC (Objective-C)
- 调整UITableView的大小以适应内容
- 在代码中为UIButton设置一个图像
- UICollectionView中的单元格间距