NSArrays chung có thể được nhận ra bằng cách phân lớp NSArray
và xác định lại tất cả các phương thức được cung cấp với các phương thức hạn chế hơn. Ví dụ,
- (id)objectAtIndex:(NSUInteger)index
sẽ phải được xác định lại trong
@interface NSStringArray : NSArray
như
- (NSString *)objectAtIndex:(NSUInteger)index
đối với NSArray chỉ chứa NSStrings.
Lớp con được tạo có thể được sử dụng như một sự thay thế thả xuống và mang lại nhiều tính năng hữu ích: cảnh báo trình biên dịch, truy cập thuộc tính, tạo mã và hoàn thành mã tốt hơn trong Xcode. Tất cả đều là các tính năng thời gian biên dịch, không cần xác định lại việc triển khai thực tế - các phương thức của NSArray vẫn có thể được sử dụng.
Có thể tự động hóa điều này và rút gọn nó xuống chỉ còn hai câu, điều này mang nó gần với các ngôn ngữ hỗ trợ khái quát. Tôi đã tạo một tự động hóa với WMGenericCollection , trong đó các mẫu được cung cấp dưới dạng Macro tiền xử lý C.
Sau khi nhập tệp tiêu đề chứa macro, bạn có thể tạo NSArray chung với hai câu lệnh: một cho giao diện và một cho triển khai. Bạn chỉ cần cung cấp kiểu dữ liệu bạn muốn lưu trữ và đặt tên cho các lớp con của bạn. WMGenericCollection cung cấp các mẫu như vậy cho NSArray
, NSDictionary
và NSSet
, cũng như các đối tác có thể thay đổi của chúng.
Một ví dụ: List<int>
có thể được nhận ra bởi một lớp tùy chỉnh được gọi NumberArray
, được tạo bằng câu lệnh sau:
WMGENERICARRAY_INTERFACE(NSNumber *, // type of the value class
// generated class names
NumberArray, MutableNumberArray)
Khi bạn đã tạo NumberArray
, bạn có thể sử dụng nó ở mọi nơi trong dự án của bạn. Nó thiếu cú pháp của <int>
, nhưng bạn có thể chọn lược đồ đặt tên của riêng bạn để gắn nhãn này dưới dạng các lớp làm mẫu.