Jawaban:
Dari halaman Apple pada " Protokol Resmi ":
Metode Protokol opsional dapat ditandai sebagai opsional menggunakan kata kunci @ opsional. Sesuai dengan kata kunci modal opsional, ada kata kunci yang diminta untuk menunjukkan secara formal semantik dari perilaku default. Anda dapat menggunakan @optional dan @required untuk mempartisi protokol Anda menjadi beberapa bagian sesuai keinginan Anda. Jika Anda tidak menentukan kata kunci apa pun, defaultnya adalah @required.
@protocol MyProtocol
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end
Jika suatu metode dalam protokol ditandai sebagai opsional, Anda harus memeriksa apakah suatu objek mengimplementasikan metode itu sebelum mencoba memanggilnya.
Sebagai contoh, tampilan diagram lingkaran mungkin menguji metode judul segmen seperti ini:
NSString *thisSegmentTitle;
if ([self.dataSource respondsToSelector:@selector(titleForSegmentAtIndex:)]) {
thisSegmentTitle = [self.dataSource titleForSegmentAtIndex:index];
}
Metode ResponssToSelector: menggunakan pemilih, yang merujuk ke pengidentifikasi untuk metode setelah kompilasi. Anda dapat memberikan pengidentifikasi yang benar dengan menggunakan petunjuk @selector () dan menentukan nama metode.
Jika sumber data dalam contoh ini mengimplementasikan metode, judul digunakan; jika tidak, judulnya tetap nol.
@protocol MyProtocol <NSObject>
Protokol adalah seperangkat aturan. Kita dapat membuat protokol seperti contoh di bawah ini:
TestProtocols.h
@protocol TestProtocols <NSObject>
@optional
-(void)testMethodOptional;
@required // by default
-(void)testMethodRequired;
@end
Penerapan:
TestClass.h
#import "TestProtocols.h"
@interface TestClass : NSObject <TestProtocols>
@end
TestClass.m
#import "TestClass.h"
@implemenation TestClass
//optional to implement
-(void)testMethodOptional{
// Your Code
}
//required to implement
-(void)testMethodRequired{
// Your Code
}
@end
Gunakan @optional
kata kunci sebelum deklarasi metode Anda untuk menjadikannya opsional. Sederhana seperti itu!
// myProtocol.h
@protocol myProtocol
- (void)myMandatoryMethod:(id)someArgument;
@optional
- (void)myOptionalMethod:(id)someArgument;
@end
// myClass.m
@interface myClass : someSuperClass <myProtocol>
//...
@end
Protokol bertindak sama dengan kelas abstrak, sehingga kata kunci @ opsional menentukan metode yang opsional untuk implementasi.
Jadi, dalam kode, someMethod1, someMethod2 dan someMethod4 adalah metode yang diperlukan (harus diimplementasikan). someMethod3 adalah opsional - jika kami tidak menerapkan metode ini, kompiler tidak akan memberikan peringatan apa pun.
@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