0

我只是在查看我们拥有的一些代码,所以这个问题是从无知中提出的,并确保我完全理解发生了什么。我们有几个应用程序总是包含以下类别:

头文件:

#import <Foundation/Foundation.h>

@interface NSDictionary (additions)
-(id)notNullObjectForKey:(id)aKey;
@end

实现文件:

#import "NSDictionary+Additions.h"

@implementation NSDictionary (additions)

-(id)notNullObjectForKey:(id)aKey
{
    id obj=[self objectForKey:aKey];
    if([obj isKindOfClass:[NSNull class]]){
        return nil;
    }
    return obj;
}

@end

我们将它用于 JSON 解析,以防止像这样(在 Item.h 中)格式错误的数据 - 大概。

-(id)initWithAttributes:(NSDictionary *)attributes
{
    self.name=[attributes notNullObjectForKey:@"name"];
    return self;
}

有没有办法做到这一点而不必将其添加到每个项目中?所有这些检查是否存在密钥是否存在,如果不存在,则返回 NSNull?

谢谢

4

1 回答 1

1

代码检查对象是否等于NSNull,如果是,则返回 nil。这可以防止其余代码需要检查。如果该键的值不存在或不存在,NSNull则代码不会更改任何内容。

还有其他方法可以做到这一点,但类别是一个很好的解决方案。大多数其他解决方案将更加人为和/或不易阅读。

于 2013-08-12T18:53:31.930 回答