수색…


기본 프로토콜 정의

새 프로토콜 정의 :

@protocol NewProtocol

- (void)protocolMethod:(id)argument;

- (id)anotherMethod;

@end

선택적 및 필수 방법

기본적으로 프로토콜에 선언 된 모든 메소드가 필요합니다. 즉,이 프로토콜을 준수하는 모든 클래스는 이러한 메소드를 구현해야합니다.

선택적 메소드를 선언 할 수도 있습니다. 이러한 방법은 필요한 경우에만 구현할 수 있습니다.

옵션 옵션을 @optional 지시어로 표시합니다.

@protocol NewProtocol
- (void)protocolMethod:(id)argument;
@optional
- (id)anotherMethod;
@end

이 경우 anotherMethodanotherMethod 으로 표시됩니다. @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) ];



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow