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?

cfischer
sumber

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.

Nikolai Ruhe
sumber
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