programing

선택적 메서드를 사용하여 프로토콜을 만드는 방법은 무엇입니까?

bestprogram 2023. 4. 17. 22:34

선택적 메서드를 사용하여 프로토콜을 만드는 방법은 무엇입니까?

iPhone SDK에 정의되어 있는 몇 가지 프로토콜(예:UIActionSheetDelegate예를 들어 프로토콜입니다.

자체 프로토콜을 정의하고 몇 가지 메서드를 옵션으로 설정하려면 어떻게 해야 합니까?

"Formal Protocols"의 Apple 페이지에서 다음을 수행합니다.

옵션의 Protocol 메서드는 @optional 키워드를 사용하여 옵션으로 마킹할 수 있습니다.@optional modal 키워드에 대응하는 @required 키워드가 있어 디폴트 동작의 의미를 정식으로 나타냅니다.@optional 및 @required를 사용하여 프로토콜을 적합한 섹션으로 분할할 수 있습니다.키워드를 지정하지 않으면 기본값은 @required 입니다.

@protocol MyProtocol

- (void)requiredMethod;

@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;

@required
- (void)anotherRequiredMethod;

@end

프로토콜의 메서드가 선택 사항으로 표시된 경우 오브젝트가 메서드를 호출하기 전에 해당 메서드를 구현하는지 확인해야 합니다.

예를 들어 원형 차트 뷰는 세그먼트 제목 메서드에 대해 다음과 같이 테스트할 수 있습니다.

NSString *thisSegmentTitle;
if ([self.dataSource respondsToSelector:@selector(titleForSegmentAtIndex:)]) {
    thisSegmentTitle = [self.dataSource titleForSegmentAtIndex:index];
}

respons To Selector: 메서드는 컴파일 후 메서드의 식별자를 참조하는 셀렉터를 사용합니다.@selector() 디렉티브를 사용하여 메서드의 이름을 지정함으로써 올바른 식별자를 지정할 수 있습니다.

이 예의 데이터 원본이 메서드를 구현한 경우 제목이 사용되며, 그렇지 않은 경우 제목은 0인 채로 유지됩니다.

프로토콜은 규칙 집합입니다.다음과 같이 프로토콜을 만들 수 있습니다.

Test Protocols.h

@protocol TestProtocols <NSObject>
    @optional
    -(void)testMethodOptional;

    @required  // by default
    -(void)testMethodRequired;
@end

구현:

Test Class.h

#import "TestProtocols.h"
@interface TestClass : NSObject  <TestProtocols>

@end

Test Class.m

#import "TestClass.h"
@implemenation TestClass
    //optional to implement 
    -(void)testMethodOptional{
     // Your Code
    }

    //required to implement 
    -(void)testMethodRequired{
     // Your Code
    }
@end

를 사용합니다.@optional옵션인 경우 메서드 선언 전에 키워드를 지정합니다.그렇게 간단해!

// myProtocol.h
@protocol myProtocol
- (void)myMandatoryMethod:(id)someArgument;
@optional
- (void)myOptionalMethod:(id)someArgument;
@end
// myClass.m
@interface myClass : someSuperClass <myProtocol>
    //...
@end

프로토콜은 추상 클래스와 동일하게 동작하기 때문에 @optional 키워드는 구현 시 옵션인 메서드를 정의합니다.

따라서 코드에서는 일부 Method1, 일부 Method2, 일부 Method4가 필수 메서드입니다(실장해야 합니다).일부 Method3는 옵션입니다.이 메서드를 구현하지 않으면 컴파일러는 경고를 보내지 않습니다.

@protocol myPrtocol<NSObject>

-(void)someMethod1:(id)someArgument;
-(void)someMethod2:(id)someArugument;

@optional

-(void)someMethod3:(id)someArgument;

@required //by default

-(void)someMethod4:(id)someArgument;

@end

// sampleClass.m
@interface sampleClass : someSuperClass <myProtocol>
//...
@end

언급URL : https://stackoverflow.com/questions/322498/how-to-create-a-protocol-with-methods-that-are-optional