如何自定义字典中的key

一般情况下用字典的时候,都是用NSString做为字典的key,其实key可以自定义的,只要是NSObject类型的就可以当key.

今天介绍一下如何自定义key.

首先当然是继承NSObject,如

@interface CustomKey : NSObject

- (id)initWithApp:(NSString *)appId_ type:(NSString *)formType_;

@property (nonatomic, retain) NSString *appId;
@property (nonatomic, retain) NSString *formType;
@end

然后实现是:

@implementation CustomKey
@synthesize appId = _appId ;
@synthesize formType = _formType;

+ (void)initialize {
}


- (id)initWithApp:(NSString *)appId_ type:(NSString *)formType_{
    if ((self = [super init])) {
        self.appId = appId_;
        self.formType = formType_;
    }
    
    return self;
}

- (void)dealloc {
    
    self.appId = nil;
    self.formType = nil;
    [super dealloc];
}

- (id)copyWithZone:(NSZone *)zone {
    return [[[self class] allocWithZone:zone] initWithApp:_appId type:_formType];
}

- (BOOL)isEqual:(id)object_ {
    BOOL eAId   = [_appId isEqualToString:[object_ valueForKey:@"appId"]];
    BOOL eType  = [_formType isEqualToString:[object_ valueForKey:@"formType"]];
    
    return eAId & eType;
}

- (NSUInteger)hash {
    return [_appId hash] ^ [_formType hash];
}

- (NSString *)description {
    return [NSString stringWithFormat:@"key:appid=%@, type=%@", _appId, _formType];
}

@end

其中hash ,isEqual与copyWithZone一定得重写。因为在比较两个key的时候系统会自动调用判断两个instance是否相等。不同值可能hash会相等,所以需要重写更为复杂的hash方法,在下面参看文档中有介绍。


这样你就可以用CustomKey做为字典的key了, 每个key还有两个变量,这样可以与数据库中的主键对应起来。哈哈,爽。


参看文档:http://www.mikeash.com/pyblog/friday-qa-2010-06-18-implementing-equality-and-hashing.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值