MacRuby: соответствие протоколам

Я новичок в MacRuby (и Objective-C). Читая некоторую документацию Cocoa, я постоянно натыкаюсь на части, в которых упоминаются делегаты, соответствующие протоколам. До сих пор я продолжаю устанавливать свой AppDelegate в качестве протокола для всего, что говорит о делегате, но я не уверен, соответствую ли я необходимым протоколам.

Что мне нужно знать о протоколах и как мне соответствовать им в моем приложении?


person Andrew    schedule 06.01.2012    source источник


Ответы (1)


Вам необходимо понимать, что такое [формальный] протокол Objective-C, в том числе то, что он определяет обязательные и/или необязательные методы. См. документацию Apple по Objective-C. Протоколы — это ограниченная форма множественного наследования, при которой наследуется только поведение, но не состояние. В других языках это может называться interface или mix-in.

Соответствие протоколу означает, что ваш класс реализует все обязательные методы и, возможно, ни один, некоторые или все необязательные методы.

Как правило, протокол используется для делегатов. Это средство формализации API, которое класс требует от своего делегата. Для данного протокола делегата вам необходимо понимать этот API. Обратитесь к документации Apple относительно этого конкретного протокола.

Наконец, нет ни способа, ни необходимости объявлять, что ваш класс MacRuby соответствует какому-либо протоколу. Вы можете напрямую назначить свой экземпляр класса делегату клиентского объекта. Вы по-прежнему должны соответствовать протоколу, но проверки во время компиляции не будет. Если вы не соответствуете требованиям, вы можете ожидать исключение во время выполнения. Или какое-то странное поведение. Или что-то.

Во всяком случае, это мое понимание.

person Jean-Denis Muys    schedule 06.01.2012
comment
Итак, похоже, что соответствие протоколу — это просто вопрос определения необходимых (или необязательных) методов? - person Andrew; 10.01.2012
comment
(... что касается MacRuby) - person Andrew; 10.01.2012
comment
@Jean-DenisMuys Что мы делаем, когда код, которому передается наш рубиновый объект, выполняет явный тест -conformsToProtocol:? - person ; 18.04.2013