หมวดหมู่สามารถใช้โปรโตคอลใน Objective C ได้หรือไม่?


88

ฉันมีหมวดหมู่ใน NSDate และจะสะดวกหากสามารถใช้โปรโตคอลที่ฉันสร้างไว้ก่อนหน้านี้ได้ เป็นไปได้หรือไม่ ไวยากรณ์ที่ถูกต้องสำหรับสิ่งนี้คืออะไร?

คำตอบ:


144

ใช่เป็นไปได้ ไวยากรณ์คือ:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

นี่คือเอกสารของ Appleในหัวข้อ

นอกจากนี้ยังสามารถทำได้โดยใช้ส่วนขยายคลาส ฉันชอบสิ่งนี้มากเพื่อให้สอดคล้องกับโปรโตคอลของผู้ร่วมประชุมแบบส่วนตัว การทำเช่นนี้จะซ่อนรายละเอียดการใช้งานของการเป็นผู้รับมอบสิทธิ์ของคลาสบางคลาสจากอินเทอร์เฟซสาธารณะและลบการอ้างอิงออกจากส่วนหัว


น่าเสียดายที่ไม่มีวิธีย้ายการประกาศโปรโตคอลไปยังการใช้งานประเภทคลาส
adib

@adib นั่นคือส่วนขยายคลาสที่มีไว้สำหรับ
Nikolai Ruhe

@ bikram990 เอกสารนี้เลิกใช้แล้วและตอนนี้อยู่ในส่วนของมรดก ฉันอัปเดตลิงค์
Nikolai Ruhe

น่าเสียดายที่เราไม่สามารถประกาศตัวแปรอินสแตนซ์เป็นหมวดหมู่ซึ่งเราอาจจำเป็นสำหรับการใช้งานโปรโตคอลที่ได้รับมอบหมาย
yasirmturk

@yasirmturk คุณสามารถทำได้โดยใช้ objc_setAssociatedObject :)
animaonline
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.