noa*_*mtm 2 reflection dictionary properties dynamic objective-c
在我的obj-c类中,我有一个将字符串映射到对象的字典.
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"value1", @"key1", @"value2", @"key2", nil];
MyClass* obj = [[MyClass alloc] initWithDictionary:dict];
Run Code Online (Sandbox Code Playgroud)
现在,而不是做:
NSString* val1 = [obj value:@"key1"];
Run Code Online (Sandbox Code Playgroud)
我想要做:
NSString* val1 = [obj key1]; // @"value1"
NSString* val2 = [obj key2]; // @"value2"
NSString* val3 = [obj key3]; // nil, not found
Run Code Online (Sandbox Code Playgroud)
可能吗?
当然这假定(a)字典键是有效的标识符名称; (b)没有具有相同名称的"真实"属性/方法(这可能会改为称为真实方法).
NSKeyValueCoding是一种支持键值编码的非正式协议.它是基金会的一部分,所以它已经可供您使用.
valueForUndefinedKey当您尝试以KVC方式访问某些没有属性或KVC兼容访问器的内容时,您可以尝试覆盖调用的内容.然后,在overriden方法中,您只需将键的值传递给字典:
- (id) valueForUndefinedKey: (NSString*)aKey {
return [obj objectForKey:aKey];
}
Run Code Online (Sandbox Code Playgroud)
在那里坚持一些错误检查,你应该好好去.
现在你打电话的时候:
NSString *theKey = @"Key1";
NSString *val1 = [obj theKey];
Run Code Online (Sandbox Code Playgroud)
如果没有被调用的属性,Key1并且没有方法返回一个被Key1调用的对象,它将调用valueForUndefinedKey:theKey哪个将调用你的字典中的分配给键@"Key1"的对象.