11.5 Определения протокола |
Вверх Предыдущий Следующий |
В Objective-C, протоколы играют туже роль что и интерфейсы в Object Pascal, но есть некоторые отличия: •Методы протокола могут быть отмечены как необязательные, то есть класс, реализующий протокол может принять решение не реализовывать эти методы. •Протоколы могут наследоваться от нескольких других протоколов. В классах Objective-C можно указать, какие протоколы они реализуют при определении класса, это можно увидеть на синтаксической диаграмме классов для Objective-C. На следующей диаграмме показано, как объявить протокол. Он начинается с ключевого слова objcprotocol: Тип протокола Как и в случае классов 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. Компилятор (во время выполнения) может вывести его из определения протокола. |