В новом Руководстве по разработке Swift API обычно используется суффикс Type для протоколов. Хотя это легко сделать для автономных протоколов (SequenceType становится Sequence), я не уверен, как обновлять мои API, в которых протокол предоставляет базу для реализации. Вот несколько примеров из популярных фреймворков:
- Result μframework предоставляет
Result, конкретную перечисление успеха/неудачи иResultType, общий базовый протокол для типа успеха/сбоя, к которому соответствуетResult. - ReactiveCocoa основные типы
SignalиSignalProducer, которые поддерживаютсяSignalTypeиSignalProducerType.
В обоих случаях большая часть реализации заключается в расширениях протоколов, позволяя расширениям использовать полную мощность ограничений типов и позволяя реализациям быть универсальными. Это отличается от протоколов с типом стирания типа AnySequence: вы не должны сами реализовать эти протоколы или унифицировать разрозненные типы.