Objective-C Language
프로토콜
수색…
기본 프로토콜 정의
새 프로토콜 정의 :
@protocol NewProtocol
- (void)protocolMethod:(id)argument;
- (id)anotherMethod;
@end
선택적 및 필수 방법
기본적으로 프로토콜에 선언 된 모든 메소드가 필요합니다. 즉,이 프로토콜을 준수하는 모든 클래스는 이러한 메소드를 구현해야합니다.
선택적 메소드를 선언 할 수도 있습니다. 이러한 방법은 필요한 경우에만 구현할 수 있습니다.
옵션 옵션을 @optional
지시어로 표시합니다.
@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
@end
이 경우 anotherMethod
만 anotherMethod
으로 표시됩니다. @optional
지시문이없는 메소드가 필요하다고 가정합니다.
@optional
지시문은 프로토콜 정의의 끝까지 또는 다른 지시문이 발견 될 때까지 이어지는 메소드에 적용됩니다.
@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
- (void)andAnotherMethod:(id)argument;
@required
- (void)lastProtocolMethod;
@end
이 마지막 예는 두 개의 선택적 메소드와 두 개의 필수 메소드가있는 프로토콜을 정의합니다.
프로토콜 준수
다음 구문은 클래스가 꺾쇠 괄호를 사용하여 프로토콜을 채택 함을 나타냅니다.
@interface NewClass : NSObject <NewProtocol>
...
@end
즉, NewClass의 인스턴스는 인터페이스에서 선언 된 메소드에 응답하지만 NewProtocol
모든 필수 메소드에 대한 구현을 제공합니다.
클래스가 쉼표로 구분하여 여러 프로토콜을 준수 할 수도 있습니다.
@interface NewClass : NSObject <NewProtocol, AnotherProtocol, MyProtocol>
...
@end
단일 프로토콜을 준수 할 때와 마찬가지로, 클래스는 각 프로토콜의 각 필수 메소드와 구현할 선택의 각 선택적 메소드를 구현해야합니다.
전달 선언
메서드없이 프로토콜 이름을 선언 할 수 있습니다.
@protocol Person;
코드 (클래스 정의 등)를 사용하십시오.
@interface World : NSObject
@property (strong, nonatomic) NSArray<id<some>> *employees;
@end
나중에 코드의 어딘가에서 프로토콜의 메서드를 정의합니다.
@protocol Person
- (NSString *)gender;
- (NSString *)name;
@end
프로토콜 정의로 해당 파일을 가져 오기 전까지 프로토콜 세부 정보를 알 필요가없는 경우에 유용합니다. 따라서 클래스 헤더 파일은 명확하게 유지되며 클래스의 세부 정보 만 포함합니다.
선택적 메소드 구현의 존재 확인
if ([object respondsToSelector:@selector(someOptionalMethodInProtocol:)])
{
[object someOptionalMethodInProtocol:argument];
}
확인 준수 프로토콜
클래스가 프로토콜을 준수하는지 여부를 나타내는 Boolean을 반환합니다.
[MyClass conformsToProtocol:@protocol(MyProtocol)
];