测试对象类是否为零的最佳方法?

时间:2010-12-05 20:44:43

标签: objective-c

在目标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"个警告消息

由于

3 个答案:

答案 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的子类。

这非常有目的。