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

Как продлить протокол в Swift

В Swift, как мы определяем протокол, который расширяет или специализирует базовый протокол? Документация, похоже, не делает этого ясно.

Также неясно, соответствуют ли протоколы Swift/расширению протокола NSObject? Это интересный вопрос, поскольку он намекает на то, что Swift использует диспетчер vtable или сообщений для вызова методов протокола.

4b9b3361

Ответ 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 { }