检查对象是NSArray还是NSDictionary

时间:2011-10-25 07:37:27

标签: objective-c

根据主题,我如何检查对象是NSArray还是NSDictionary?

4 个答案:

答案 0 :(得分:95)

if([obj isKindOfClass:[NSArray class]]){
    //Is array
}else if([obj isKindOfClass:[NSDictionary class]]){
    //is dictionary
}else{
    //is something else
}

答案 1 :(得分:13)

尝试

[myObject isKindOfClass:[NSArray class]]

[myObject isKindOfClass:[NSDictionary class]]

这两个都应该返回BOOL值。这是NSObject方法的基本用法:

-(BOOL)isKindOfClass:(Class)aClass

有关更多信息,请在此处查看此答案: In Objective-C, how do I test the object type?

答案 2 :(得分:8)

考虑从JSON或XML响应中解析数据的情况。根据您使用的解析库,您可能不会得到NSArrays或NSDictionaries。相反,您可能有__NSCFArray或__NSCFDictionary。

在这种情况下,检查您是否有数组或字典的最佳方法是检查它是否响应只有数组或字典才会响应的选择器:

if([unknownObject respondsToSelector:@selector(lastObject)]){

// You can treat unknownObject as an NSArray
}else if([unknownObject respondsToSelector:@selector(allKeys)]){

// You can treat unknown Object as an NSDictionary
}

答案 3 :(得分:0)

万一有人来这个派对寻找一个Swift等同物,你走了。它比Objective-C版本,恕我直言更优雅,因为它不仅检查类型,而且同时将它们转换为所需的类型:

if let arrayVersion = obj as? NSArray {
    // arrayVersion is guaranteed to be a non-`nil` NSArray
} else if let dictionaryVersion = obj as? NSDictionary {
    // dictionaryVersion is guaranteed to be a non-`nil` NSDictionary
} else {
    // it's neither
}