如何用某種協議的通用實現來裝飾類?如何實現協議一般與類別?
對不起,這可能是一個明顯的問題。我是新來的客觀的C,所以我仍然只是一點點踩水。
我已經得到了我想要一個通用的實施方案:
@protocol SelectableElement <NSObject>
@property BOOL selected;
@end
我有一對夫婦的對象,我想可選:
@interface Widget : NSObject <SelectableElement>
@end
@interface Duhicky : NSObject <SelectableElement>
@end
我」 d喜歡做的是一次編寫協議的實現,並確保兩個對象都以這種方式實現。
我不認爲我可以寫一個通用類,並將其綁定到兩個,所以我想這樣做是爲了增加實現對通用類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
中當然,我不能定義一個屬性變量來做到這一點,我需要使用關聯對象存儲......我沒有在這裏演示過。
這是將可選行爲一般添加到實現可選元素協議的任何事情的唯一方法嗎?還是有更明顯的方式,我失蹤了?
我當然可以使用繼承來實現這個簡單的例子,但這隻適用於以這種方式實現單個協議。這種方法我認爲是天作之合,還是黑客?
Joe
+1:或換句話說,Widget和Duhicky類應該是SelectableObject的子類。 – lnafziger