@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