Video: Learning iOS: Create your own app with Objective-C! by Tianyu Liu 2024
Protokol mendefinisikan kumpulan metode yang dapat diterapkan oleh kelas manapun. Pikirkan protokol sebagai antarmuka yang mendefinisikan kelas yang harus diimplementasikan. Protokol sering digunakan untuk menentukan interface untuk mendelegasikan objek.
Dengan fitur protokol, Anda dapat menghindari keharusan memaksa subclass untuk membuat kelas polimorfik. Objective-C (tidak seperti C ++) tidak mengizinkan kelas memiliki beberapa superclasses. Oleh karena itu, Protokol merupakan fitur penting dalam Objective-C karena tidak memungkinkan multiple inheritance.
Saat kelas menerapkan metode dalam sebuah protokol, kelas dikatakan menyesuaikan dengan protokol.
Definisi protokol mirip dengan definisi antarmuka untuk kelas. Namun, protokol tidak memiliki kelas induk atau instance variable. Berikut adalah contoh definisi protokol (Printable) dari program kalkulator postfix:
@protocol Printable - (void) printMe; // aku bisa meninggalkan @quoring, karena itu adalah default @optional - (NSString *) printMeToString; -d
Dengan kedatangan (dan memang dengan keriuhan yang hebat) dari Objective-C 2. 0, metode protokol dapat diperlukan (default) atau opsional.
Berikut adalah deklarasi StackOfInteger yang menyatakan bahwa ia akan menerapkan protokol: @interface StackOfInteger: NSObject … -d
Berikut adalah implementasi protokol di kelas StackOfInteger:
@implementation StackOfInteger; … Metode StackOfInteger Lainnya … /////////// Metode untuk menerapkan protokol Printable //////////// - (void) printMe {int k, stackCount = [elements count]; NSLog (@ "Stack-> Last>% dlast); untuk (k = 0; k% @Perhatikan bahwa metode printMeToString tidak diimplementasikan karena bersifat opsional.
< Program yang dapat menguji apakah sebuah objek sesuai dengan sebuah protokol. Kode berikut mencakup contoh tes ini (diambil dari program utama sampel): printf ("Menguji kesesuaian dengan protocolsn "); if ([myStack conformsToProtocol: @protocol (Printable)]) {printf (" Using protocol methodsn "); [myStack printMe];} else {NSLog (@" Objek tidak sesuai dengan protokol% @ n ", @protocol (Printable));} id someObject = [[PostfixCalculator alloc] initWithExpression: @ "44 55 *"]; if (! [someObject conformsToProtocol: @protocol (Printable)]) {NSLog (@ "Objek tidak sesuai dengan protokol ");}
Karena objek myStack sesuai dengan protokol, metode printMe dan printMeToString dipanggil. Karena someObject (yang tipe id untuk membuat contoh lebih bermakna) tidak sesuai dengan protokol Printable, tes untuk kesesuaian gagal
Anda juga dapat menguji adanya metode opsional dengan menggunakan metode respondsToSelector. Anda dapat membuat sebuah kelas mengadopsi sebuah protokol hanya dengan menerapkan metode yang didefinisikan oleh protokol tersebut. Artinya, Anda tidak perlu mendeklarasikan protokol di antar muka. Namun, meskipun kelas menerapkan metode protokol, protokol tersebut tidak akan sesuai dengan protokol dan akan membatalkan uji kesesuaian sebelumnya.