NSArrays ทั่วไปสามารถรับรู้ได้โดยการแบ่งคลาสย่อยNSArray
และกำหนดวิธีการที่ให้ไว้ทั้งหมดด้วยวิธีที่ จำกัด มากขึ้น ตัวอย่างเช่น,
- (id)objectAtIndex:(NSUInteger)index
จะต้องมีการนิยามใหม่ใน
@interface NSStringArray : NSArray
เช่น
- (NSString *)objectAtIndex:(NSUInteger)index
สำหรับ NSArray ที่จะมี NSStrings เท่านั้น
คลาสย่อยที่สร้างสามารถใช้แทนการดร็อปอินและนำคุณสมบัติที่มีประโยชน์มากมาย: คำเตือนคอมไพเลอร์, การเข้าถึงคุณสมบัติ, การสร้างโค้ดที่ดีขึ้นและ -completion ใน Xcode ทั้งหมดนี้เป็นคุณสมบัติการคอมไพล์เวลาไม่จำเป็นต้องกำหนดการนำไปใช้งานจริง - วิธีการของ NSArray ยังคงสามารถใช้งานได้
เป็นไปได้ที่จะทำให้เป็นแบบนี้โดยอัตโนมัติและต้มให้เหลือเพียงสองข้อความซึ่งนำมาซึ่งความใกล้เคียงกับภาษาที่รองรับคำศัพท์ทั่วไป ฉันได้สร้างระบบอัตโนมัติด้วยWMGenericCollectionซึ่งมีเทมเพลตให้ไว้ในมาโคร C ตัว
หลังจากอิมพอร์ตไฟล์ส่วนหัวที่มีแมโครคุณสามารถสร้าง NSArray ทั่วไปโดยมีสองข้อความสั่ง: หนึ่งคำสั่งสำหรับอินเตอร์เฟสและอีกหนึ่งข้อความสำหรับการนำไปใช้ คุณจะต้องระบุประเภทข้อมูลที่คุณต้องการจัดเก็บและชื่อสำหรับคลาสย่อยของคุณ WMGenericCollection ให้แม่แบบดังกล่าวสำหรับNSArray
, NSDictionary
และNSSet
เช่นเดียวกับคู่ของพวกเขาแน่นอน
ตัวอย่าง: List<int>
สามารถรับรู้ได้โดยคลาสที่กำหนดเองที่เรียกว่าNumberArray
ซึ่งสร้างขึ้นด้วยคำสั่งต่อไปนี้:
WMGENERICARRAY_INTERFACE(NSNumber *, // type of the value class
// generated class names
NumberArray, MutableNumberArray)
เมื่อคุณสร้างNumberArray
คุณสามารถใช้มันได้ทุกที่ในโครงการของคุณ มันไม่มีไวยากรณ์<int>
แต่คุณสามารถเลือกรูปแบบการตั้งชื่อของคุณเองเพื่อติดป้ายเหล่านี้เป็นคลาสเป็นเทมเพลต