NSArr generik dapat direalisasikan dengan mensubclassing NSArray
, dan mendefinisikan ulang semua metode yang disediakan dengan yang lebih membatasi. Sebagai contoh,
- (id)objectAtIndex:(NSUInteger)index
harus didefinisikan ulang di
@interface NSStringArray : NSArray
sebagai
- (NSString *)objectAtIndex:(NSUInteger)index
untuk NSArray hanya mengandung NSStrings.
Subkelas yang dibuat dapat digunakan sebagai pengganti drop-in dan membawa banyak fitur yang berguna: peringatan kompiler, akses properti, pembuatan kode yang lebih baik dan penyelesaian-di Xcode. Semua ini adalah fitur waktu kompilasi, tidak perlu mendefinisikan ulang implementasi yang sebenarnya - metode NSArray masih dapat digunakan.
Mungkin untuk mengotomatisasi ini dan membuatnya menjadi hanya dua pernyataan, yang membuatnya dekat dengan bahasa yang mendukung obat generik. Saya telah membuat otomatisasi dengan WMGenericCollection , di mana templat disediakan sebagai C Preprocessor Macros.
Setelah mengimpor file header yang berisi makro, Anda bisa membuat NSArray umum dengan dua pernyataan: satu untuk antarmuka dan satu untuk implementasi. Anda hanya perlu memberikan tipe data yang ingin Anda simpan dan nama untuk subclass Anda. WMGenericCollection menyediakan template untuk NSArray
, NSDictionary
danNSSet
, serta rekanan yang bisa berubah.
Contoh: List<int>
dapat direalisasikan oleh kelas kustom yang disebut NumberArray
, yang dibuat dengan pernyataan berikut:
WMGENERICARRAY_INTERFACE(NSNumber *, // type of the value class
// generated class names
NumberArray, MutableNumberArray)
Setelah dibuat NumberArray
, Anda dapat menggunakannya di mana saja di proyek Anda. Itu tidak memiliki sintaks <int>
, tetapi Anda dapat memilih skema penamaan Anda sendiri untuk label ini sebagai kelas sebagai templat.