检查对象是否是NSArray或NSDictionary

根据主题,我怎样才能检查一个对象是一个NSArray或NSDictionary?

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

尝试

 [myObject isKindOfClass:[NSArray class]] 

 [myObject isKindOfClass:[NSDictionary class]] 

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

 -(BOOL)isKindOfClass:(Class)aClass 

有关更多信息,请参阅此处的答案: 在Objective-C中,如何testing对象types?

考虑从JSON或XML响应中parsing数据的情况。 根据您使用的parsing库,您可能不会结束与NSArrays或NSDictionaries。 相反,你可能有__NSCFArray或__NSCFDictionary。

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

 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 } 

以防万一任何人迟到这个聚会寻找一个Swift的等价物,在这里你去。 它比Objective-C版本更加优雅,恕我直言,因为它不仅检查types,而且同时它们转换为所需的types:

 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 }