Genel NSArray'ler, alt sınıflandırma NSArray
ve sağlanan tüm yöntemleri daha kısıtlayıcı olanlarla yeniden tanımlayarak gerçekleştirilebilir . Örneğin,
- (id)objectAtIndex:(NSUInteger)index
yeniden tanımlanmalıdır
@interface NSStringArray : NSArray
gibi
- (NSString *)objectAtIndex:(NSUInteger)index
NSArray öğesinin yalnızca NSStrings içermesi için.
Oluşturulan alt sınıf bir yedek değiştirme olarak kullanılabilir ve birçok yararlı özellik getirir: derleyici uyarıları, özellik erişimi, daha iyi kod oluşturma ve Xcode'da tamamlama. Tüm bunlar derleme zamanı özellikleridir, gerçek uygulamayı yeniden tanımlamaya gerek yoktur - NSArray'in yöntemleri hala kullanılabilir.
Bunu otomatikleştirmek ve sadece iki ifadeyle kaynatmak mümkündür, bu da onu jenerikleri destekleyen dillere yakınlaştırır. WMGenericCollection ile bir otomasyon oluşturdum şablonların C Önişlemci Makroları olarak sağlandığı .
Makroyu içeren başlık dosyasını içe aktardıktan sonra, biri arabirim diğeri de uygulama için olmak üzere iki deyimle genel bir NSArray oluşturabilirsiniz. Yalnızca saklamak istediğiniz veri türünü ve alt sınıflarınız için adlar sağlamanız gerekir. WMGenericCollection NSArray
, NSDictionary
veNSSet
yanı sıra bunların değişken muadilleri.
Bir örnek: aşağıdaki ifadeyle oluşturulan, List<int>
adlı özel bir sınıf tarafından gerçekleştirilebilir NumberArray
:
WMGENERICARRAY_INTERFACE(NSNumber *, // type of the value class
// generated class names
NumberArray, MutableNumberArray)
Oluşturduktan sonra NumberArray
, projenizdeki her yerde kullanabilirsiniz. Sözdiziminden yoksundur <int>
, ancak bunları şablon olarak sınıf olarak etiketlemek için kendi adlandırma düzeninizi seçebilirsiniz.