NSDictionary检查null

时间:2015-07-24 16:16:58

标签: objective-c nsnull

是否有一种快速方法可以确定某个值是否为字典中的NSNULL而不检查该对象类,如

[[dict objectForKey:@"foo"] class] != [NSNull null];

3 个答案:

答案 0 :(得分:6)

虽然你可以做ogres所说的,但最好使用:

wget --no-check-certificate --output-document="installer.7z" https://github.com/msysgit/msysgit/releases/download/Git-1.9.5-preview20150319/PortableGit-1.9.5-preview20150319.7z

由于[NSNull null]是一个单例并且只存在其中一个,您可以执行直接比较。这是文档中使用的内容:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/NumbersandValues/Articles/Null.html

  

要测试空对象值,必须进行直接对象比较。

这是首选方法。

编辑:这是在Og​​res编辑他们的帖子以使用身份比较之前编写的。

答案 1 :(得分:3)

比较值,而不是类。

dict[@"foo"] == [NSNull null]

null方法返回NSNull的单例实例。由于只分配了NSNull的一个实例,因此您可以直接将实例的地址与集合元素的地址进行比较,以确定它们中的任何一个在概念上是否为空。

答案 2 :(得分:1)

实际上您发布的内容不正确,您将类(NSNull)与此类的单例实例进行比较(NSNull null),

正确的是

[[dict objectForKey:@"foo"] isKindOfClass:[NSNull class]];

或比较实例

[dict objectForKey:@"foo"] == [NSNull null];

但是如果你有很多这样的调用,你可以创建一个NSDictionary类别并在那里添加方法,比如

- (BOOL)nl_isNSNullAt:(id)key {
    return [[self objectForKey:key] isKindOfClass:[NSNull class]];
}

或实例

- (BOOL)nl_isNSNullAt:(id)key {
    return [self objectForKey:key] == [NSNull null];
}

然后你可以直接访问

[dict nl_isNSNullAt:@"foo"]

您当然可以选择方法和类别的名称......