Swift - Различия между наследованием протокола и ограничением Self на протокол

У меня есть протокол A:

protocol A { }

Каковы различия между реализацией протокола B как это:

protocol B: A { }

по сравнению с реализацией это так:

protocol B where Self: A { }

?

Что я могу сделать с одним, что я не могу сделать с другим? Где я столкнусь с проблемой, которую можно исправить, переключив ее на другую?

1 ответ

Одно из различий в том, как вы соблюдаете протокол.

В первом случае соответствие B подразумевает соответствие A,

struct BImpl: B {} // `A` is implied here

В последнем случае соответствие B требует соответствия A, но он не создает неявно:

struct BImpl: A, B {} // `A` is explicitly required here
Другие вопросы по тегам