선택적 메서드를 사용하여 프로토콜을 만드는 방법은 무엇입니까?
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
'programing' 카테고리의 다른 글
SQL Server 문자열에서 모든 공간 제거 (0) | 2023.04.17 |
---|---|
SQL Server에 LastIndexOf가 있습니까? (0) | 2023.04.17 |
iPhone TableView셀의 셀 오른쪽에 작은 화살표 추가 (0) | 2023.04.17 |
프라이머리 키와 아이덴티티의 차이점은 무엇입니까? (0) | 2023.04.17 |
디렉토리의 모든 파일에서 탭을 공백으로 변환하려면 어떻게 해야 합니까? (0) | 2023.04.17 |