Может ли категория реализовать протокол в Objective 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.