在目标C中,有什么更好的方法:
if ([response class] == [nil class])
响应是NSDictionary或NSMutableDictionary
代码正在运行,但我收到了"Invalid receiver type 'void *' or "comparison of distinct Objective-C types 'Class' and 'struct NSMutableDictionary *' lacks a cast"
个警告消息
由于
答案 0 :(得分:6)
如果你真的想要测试[response class]
,而不是response
本身的价值,你会想要使用
if ([response isKindOfClass:[NSNull class])
如果您想检查response
本身是否为nil
,我会在this answer中针对类似问题描述一种很好的方法。
答案 1 :(得分:3)
对象的类不能为nil
,除非你搞砸了一些运行时的混乱。所有有效对象必须是有效类的实例。您是否尝试执行以下操作?
if (!response) {
// 'response' is nil
} else if ([response isKindOfClass:[NSMutableDictionary class]]) {
// response is an NSMutableDictionary
} else if ([response isKindOfClass:[NSDictionary class]]) {
// response is an NSDictionary
// (or an NSMutableDictionary if you remove the above 'if')
}
答案 2 :(得分:2)
既然您提到 NSDictionary或NSMutableDictionary 并且似乎正在测试实例类型......
isKindOfClass:
将识别接收者是否是指定类的实例。这包括子类。
请注意,您不能使用它来确定字典是可变的还是不可变的,因为字典是NSCFDictionary
的实例,它是`NSMutableDictionary的子类。
这非常有目的。