Подтвердить что ты не робот

Именование протокола в Objective C

Я борюсь с протоколами именования в Objective-C. Например:

У меня есть протокол под названием Command. У меня есть абстрактный класс, который реализует Command, который является базовым классом для моих конкретных команд.

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

Итак, как мне их назвать?

4b9b3361

Ответ 1

Я бы предположил, что в вашем случае не обязательно указывать ваш протокол, а базовый класс - то же самое, что и ваш класс является основным выражением протокола (например, с NSObject).

От Apple Рекомендации по кодированию для Cocoa: Основы кодирования кода:

Некоторые протоколы группируют ряд несвязанных методов (а не создают несколько отдельных небольших протоколов). Эти протоколы, как правило, связанный с классом, являющимся основным выражением протокол. В этих случаях конвенция должна предоставить протокол то же имя, что и класс. Примером такого протокола является Протокол NSObject. Этот протокол группирует методы, которые вы можете использовать для запросить любой объект о его позиции в иерархии классов, сделать это вызывать специальные методы и увеличивать или уменьшать его ссылку сосчитать. Поскольку класс NSObject обеспечивает основное выражение эти методы, протокол назван в честь класса.

Ответ 2

Все приведенные в Руководстве Apple по кодированию для Cocoa в разделе Основы кодирования кода.

Автор заявляет:

Протоколы должны быть названы в соответствии с тем, как они группируют поведение:

Большинство связанных с группой групп методов, которые arent, связанные с любым класса в частности. Этот тип протокола должен быть назван так, чтобы протокол не будет путать с классом. Общим соглашением является использование форма gerund ( "... ing" ):

NSLocking - хорошо.

NSLock - Бедный (похоже, имя для класса).

Некоторые протоколы группируют ряд несвязанных методов (а не создают несколько отдельных небольших протоколов). Эти протоколы, как правило, связанный с классом, являющимся основным выражением протокол. В этих случаях конвенция должна предоставить протокол то же имя, что и класс.

Примером такого протокола является протокол NSObject. Эта методы групп групп, которые вы можете использовать для запроса любого объекта о его позицию в иерархии классов, чтобы он вызывал специальные методы, и увеличить или уменьшить его счетчик ссылок. Поскольку Класс NSObject обеспечивает основное выражение этих методов, протокол присваивается имени класса.

Ответ 3

если вы увидите предопределенный протонал uitableview, NSUrlconnection, то u получит имя протокала, как UItabaleviewDelegate и NSUrlconnectionDelegate.........

Затем вы можете легко определить, какой делегат принадлежит, из какого класса

Так что вы можете использовать свой класс nameDelegate в качестве имени протока... спасибо