@interface Dog : NSObject
@end
@implementation Dog
- (id)valueForUndefinedKey:(NSString *)key
{
if ([key isEqualToString:@"quacks"])
return YES;
}
@end
上記により、KVCを活用して、次のように記述できます。
[[Dog new] valueForKey:@"quacks"]; // YES
ただし、objcランタイムを使用して同じKVCメカニズムを活用し、実行時にDuckプロトコルに準拠することはできますか?
@protocol Duck <NSObject>
@optional
@property (readonly) BOOL quacks;
@end
id<Duck> dug = (id<Duck>)[Dog new];
dug.quacks; // YES