11.5 Определения протокола

Вверх  Предыдущий  Следующий

В Objective-C, протоколы играют туже роль что и интерфейсы в Object Pascal, но есть некоторые отличия:

Методы протокола могут быть отмечены как необязательные, то есть класс, реализующий протокол может принять решение не реализовывать эти методы.

Протоколы могут наследоваться от нескольких других протоколов.

В классах Objective-C можно указать, какие протоколы они реализуют при определении класса, это можно увидеть на синтаксической диаграмме классов для Objective-C.

На следующей диаграмме показано, как объявить протокол. Он начинается с ключевого слова objcprotocol:


Тип протокола

1102


Как и в случае классов Objective-Pascal, спецификатор external сообщает компилятору, что объявление будет импортировать протокол, определенный в другом месте. К методам Objective-Pascal применяются те же правила, что к методам в объявлении класса. Исключением является то, что должен присутствовать спецификатор message (сообщение).

Спецификаторы required и optional не являются обязательными перед поcледовательностью объявлений метода. Если ничего не указано, то предполагается описатель required. Ниже приводится определение протокола:

type

  MyProtocol = objccprotocol

      // Требуется по умолчанию

      procedure aRequiredMethod;

        message 'aRequiredMethod';

     optional

      procedure anOptionalMethodWithPara(para: longint);

        message 'anOptionalMethodWithPara:';

      procedure anotherOptionalMethod;

        message 'anotherOptionalMethod';

     required

      function aSecondRequiredMethod: longint;

        message 'aSecondRequiredMethod';

  end;

 

  MyClassImplementingProtocol = objcclass(NSObject,MyProtocol)

    procedure aRequiredMethod;

    procedure anOptionalMethodWithPara(para: longint);

    function aSecondRequiredMethod: longint;

  end;

Обратите внимание, что в объявлении класса, опущен спецификатор message. Компилятор (во время выполнения) может вывести его из определения протокола.