繁体   English   中英

Objective-C字典作为属性/方法的访问

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM