클래스를 프로토콜의 일반적인 구현으로 어떻게 장식합니까?범주와 함께 프로토콜을 총체적으로 구현하려면 어떻게해야합니까?
죄송합니다. 분명한 질문 일 수 있습니다. 나는 객관적인 C를 처음 접했고 아직 물을 조금만 걷고 있습니다.
@interface Widget : NSObject <SelectableElement>
@end
@interface Duhicky : NSObject <SelectableElement>
@end
내가 '무엇 : 내가 선택할 수하고자하는 객체의 몇 가지를 가지고
@protocol SelectableElement <NSObject>
@property BOOL selected;
@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
을 물론,이 작업을 수행하기 위해 속성 변수를 정의 할 수는 없지만 여기서는 설명하지 않은 연관 객체 저장소를 사용해야합니다.
선택 가능한 요소 프로토콜을 구현하는 모든 것에 선택 가능한 동작을 일반적으로 추가하는 유일한 방법입니까? 아니면 제가 놓친 분명한 방법이 있습니까?
이 간단한 예제를 구현하기 위해 상속을 사용할 수 있지만이 방법으로 단일 프로토콜을 구현하는 경우에만 작동합니다. 내가 자연적으로 적합하다고 생각했던이 접근법인가요, 아니면 해킹입니까? 조
+1 : 또는 위젯과 Duhicky 클래스는 SelectableObject의 하위 클래스 여야합니다. – lnafziger