[英]objective-c dictionary access as property/method
在我的obj-c类中,我有一个将字符串映射到对象的字典。
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"value1", @"key1", @"value2", @"key2", nil];
MyClass* obj = [[MyClass alloc] initWithDictionary:dict];
现在,不要做:
NSString* val1 = [obj value:@"key1"];
我想要做:
NSString* val1 = [obj key1]; // @"value1"
NSString* val2 = [obj key2]; // @"value2"
NSString* val3 = [obj key3]; // nil, not found
可能吗?
当然,这假定(a)字典键是有效的标识符名称; (b)没有同名的“真实”属性/方法(这可能会调用真实方法)。
NSKeyValueCoding是一种非正式协议,可用于键值编码。 它是Foundation的一部分,因此已经可供您使用。
您可以尝试覆盖valueForUndefinedKey
,当您尝试以无属性或KVC兼容访问器的KVC方式访问某些对象时,将调用该方法。 然后,在重写方法中,您可以将键的值传递给字典:
- (id) valueForUndefinedKey: (NSString*)aKey {
return [obj objectForKey:aKey];
}
坚持一些错误检查在那里,你应该很好。
现在,当您致电:
NSString *theKey = @"Key1";
NSString *val1 = [obj theKey];
如果没有名为Key1
属性,并且没有方法返回名为Key1
的对象,则它将调用valueForUndefinedKey:theKey
,它将为您分配给键@“ Key1”的对象调用字典。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.