你如何用一些通用的协议实现来装饰一个类?
对不起,这可能是一个明显的问题。我是目标 c 的新手,所以我还是有点踩水。
我有一个协议,我想要一个通用的实现:
@protocol SelectableElement <NSObject>
@property BOOL selected;
@end
我有几个我想要选择的对象:
@interface Widget : NSObject <SelectableElement>
@end
@interface Duhicky : NSObject <SelectableElement>
@end
我想做的是一次编写协议的实现,并确保两个对象都以这种方式实现。
我不认为我可以编写一个通用类别并将其绑定到两者,所以我想一种方法是在公共类 NSObject 上添加实现类别:
@implementation NSObject (Selectable)
- (BOOL)selectable
{
if (![self conformsToProtocol:@protocol(SelectableElement)]) return;
return YES; // Use associative storage for this?
}
- (void)setSelectable:(BOOL)selectable
{
if (![self conformsToProtocol:@protocol(SelectableElement)]) return;
// set this associatively?
}
@end
当然,我不能定义一个属性变量来做到这一点,我需要使用关联对象存储......我没有在这里演示。
这是将可选行为一般添加到实现可选元素协议的任何东西的唯一方法吗?或者有没有更明显的方式我错过了?
我当然可以使用继承来实现这个简单的示例,但这仅适用于以这种方式实现单个协议。我建议的这种方法是天作之合,还是一种技巧?
乔