我需要测试对象的类型是否为NSString或UIImageView。我怎样才能做到呢?是否存在某种类型的“isoftype”方法?
当前回答
如果你的对象是myObject,你想测试看看它是否是一个NSString,代码将是:
[myObject isKindOfClass:[NSString class]]
同样地,如果你想测试myObject的UIImageView:
[myObject isKindOfClass:[UIImageView class]]
其他回答
运行一个简单的测试,我想我应该记录哪些有效,哪些无效。我经常看到人们检查对象的类是否属于另一个类,或者是否等于另一个类。
对于下面这行,我们有一些格式很差的数据,可以是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没有。
如果你的对象是myObject,你想测试看看它是否是一个NSString,代码将是:
[myObject isKindOfClass:[NSString class]]
同样地,如果你想测试myObject的UIImageView:
[myObject isKindOfClass:[UIImageView class]]
很简单,[youobjectclass]它将返回你的对象的类名。
当你想要区分父类和继承类时,你可以使用:
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))
推荐文章
- 在实现API时,我如何避免在块中捕获自我?
- 从另一个应用程序打开设置应用程序
- 使用NSURLSession发送POST请求
- 如何更改导航栏上“后退”按钮的标题
- 有没有办法从UITableView中移除分隔线?
- 如何在Objective-C中声明类级属性?
- 在Objective-C中@property保留,赋值,复制,非原子
- 我如何在NSAttributedString中创建一个可点击的链接?
- 停止UIWebView垂直“弹跳”?
- 对未渲染的视图进行快照,结果是一个空快照
- 开始使用instancetype而不是id是否有益?
- 我可以强制UITableView隐藏分隔符之间的空单元格吗?
- 为什么Objective-C文件使用。m扩展名?
- Objective-C for Windows
- 获得推送通知,而应用程序在前台iOS