Как продлить протокол в Swift
В Swift, как мы определяем протокол, который расширяет или специализирует базовый протокол? Документация, похоже, не делает этого ясно.
Также неясно, соответствуют ли протоколы Swift/расширению протокола NSObject? Это интересный вопрос, поскольку он намекает на то, что Swift использует диспетчер vtable или сообщений для вызова методов протокола.
Ответы
Ответ 1
Наследование протоколов использует регулярный синтаксис наследования в Swift.
protocol Base {
func someFunc()
}
protocol Extended : Base {
func anotherFunc()
}
Протоколы Swift по умолчанию не соответствуют NSObjectProtocol. Если вы решите, что ваш протокол соответствует NSObjectProtocol, вы ограничите свой протокол только тем, что используете его с классами.
Ответ 2
Синтаксис такой же, как если бы вы объявляли класс, унаследованный от суперкласса.
protocol SomeProtocol { }
protocol SomeOtherProtocol: SomeProtocol { }
И нет, они этого не делают. Если вы хотите, чтобы ваш протокол также соответствовал NSObjectProtocol, вы можете предоставить несколько протоколов для вашего нового протокола таким образом.
protocol SomeOtherProtocol: SomeProtocol, NSObjectProtocol { }