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