Bisakah kategori mengimplementasikan protokol di Objective C?


88

Saya memiliki kategori di NSDate dan akan lebih mudah jika dapat menerapkan protokol yang saya buat sebelumnya. Apakah ini mungkin? apa sintaks yang benar untuk ini?

Jawaban:


144

Ya itu mungkin. Sintaksnya adalah:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

Berikut dokumentasi Apple tentang topik tersebut.

Ini juga memungkinkan untuk melakukan ini menggunakan ekstensi kelas. Saya sangat suka ini secara pribadi sesuai dengan protokol delegasi. Melakukan hal itu menyembunyikan detail implementasi sebagai beberapa delegasi kelas dari antarmuka publik dan menghapus ketergantungan dari header.


Sayang sekali tidak ada cara untuk memindahkan deklarasi protokol ke implementasi kategori kelas.
adib

@adib Untuk itulah ekstensi kelas.
Nikolai Ruhe

@ bikram990 Dokumen telah dihentikan dan sekarang berada di bagian warisan. Saya memperbarui tautan.
Nikolai Ruhe

sayangnya kami tidak dapat mendeklarasikan variabel instance dalam kategori, yang mungkin kami perlukan untuk beberapa implementasi protokol delegasi
yasirmturk

@yasirmturk Anda bisa melakukannya menggunakan objc_setAssociatedObject :)
animaonline
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.