Чи може категорія реалізувати протокол у Цілі C?


88

У мене є категорія на NSDate, і було б зручно, якби вона могла реалізувати протокол, який я створив раніше. Чи можливо це? який правильний синтаксис для цього?

Відповіді:


144

Так, це можливо. Синтаксис:

@interface NSDate (CategoryName) <ProtocolName>
@end

@implementation NSDate (CategoryName)
@end

Ось документація Apple по темі.

Це також можливо зробити за допомогою розширення класу. Мені дуже подобається це приватно відповідати протоколам делегатів. Це приховує деталі реалізації того, що є делегатом якогось класу із загальнодоступного інтерфейсу, і видаляє залежність із заголовка.


Шкода, що немає способу перенести оголошення протоколу до реалізації категорії класу.
adib

@adib Для цього існують розширення класів.
Микола Руе

@ bikram990 Документ скасовано і зараз знаходиться у застарілому розділі. Я оновив посилання.
Микола Руе

на жаль, ми не можемо оголосити змінні екземпляра в категоріях, що нам може знадобитися для деяких реалізацій протоколів делегатів
yasirmturk,

@yasirmturk Ви могли б це зробити, використовуючи objc_setAssociatedObject :)
animaonline
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.