Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 检查对象是NSArray还是NSDictionary_Objective C - Fatal编程技术网

Objective c 检查对象是NSArray还是NSDictionary

Objective c 检查对象是NSArray还是NSDictionary,objective-c,Objective C,根据主题,如何检查对象是NSArray还是NSDictionary?试试看 [myObject isKindOfClass:[NSArray class]] 及 这两个函数都应该返回布尔值。这是NSObject方法的基本用法: -(BOOL)isKindOfClass:(Class)aClass 有关更多信息,请参见此处的答案: 在解析JSON或XML响应中的数据时,请考虑这种情况。根据您正在使用的解析库的不同,最终可能不会使用NSArray或NSDictionary。相反,你可能会有uu

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

试试看

[myObject isKindOfClass:[NSArray class]]

这两个函数都应该返回布尔值。这是NSObject方法的基本用法:

-(BOOL)isKindOfClass:(Class)aClass
有关更多信息,请参见此处的答案:
在解析JSON或XML响应中的数据时,请考虑这种情况。根据您正在使用的解析库的不同,最终可能不会使用NSArray或NSDictionary。相反,你可能会有uu NSCFArray或uu 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
}

万一有人来晚了,想找一个迅捷的对手,给你。它比Objective-C版本IMHO优雅得多,因为它不仅检查类型,而且同时将它们转换为所需的类型:

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
}

-1许多对象可能响应相同的选择器,尤其是像
lastObject
allKeys
这样的通用选择器。使用
isKindOfClass:
显然是处理类集群的方法,比如
NSArray
NSDictionary
。这个答案完全是胡说八道。[myObject isKindOfClass:[NSArray类]]正确回答了“myObject是否会表现得像NSArray一样”这一问题,这就是您想要的。没有只有NSArray或NSDictionary才会响应的选择器。在两分钟内,我可以用实例方法“allKeys”和“lastObject”创建一个类。或者将“allKeys”作为类别方法添加到NSArray。
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
}
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
}