범주가 Objective C에서 프로토콜을 구현할 수 있습니까?


88

NSDate에 카테고리가 있으며 이전에 만든 프로토콜을 구현할 수 있다면 편리 할 것입니다. 이것이 가능한가? 이것에 대한 올바른 구문은 무엇입니까?

답변:


144

예, 가능합니다. 구문은 다음과 같습니다.

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

여기 애플의 문서 주제에가.

클래스 확장을 사용하여이 작업을 수행 할 수도 있습니다. 위임 프로토콜을 개인적으로 준수하는 것이 매우 좋습니다. 이렇게하면 공용 인터페이스에서 일부 클래스의 일부 대리자가되는 구현 세부 정보가 숨겨지고 헤더에서 종속성이 제거됩니다.


안타깝게도 프로토콜 선언을 클래스 범주의 구현으로 옮길 방법이 없습니다.
adib

@adib 그것이 클래스 확장이있는 이유입니다.
Nikolai Ruhe 2012

@ bikram990 문서가 폐기되었으며 현재 레거시 섹션에 있습니다. 링크를 업데이트했습니다.
Nikolai Ruhe 2014-06-12

불행하게도 우리는 우리가 어떤 위임 프로토콜 구현에 필요한 수도, 카테고리 인스턴스 변수를 선언 할 수 없습니다
yasirmturk

당신이 할 수있는 @yasirmturk 그 :) objc_setAssociatedObject를 사용하여
animaonline
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.