Swift-继承协议和将自我约束为协议之间的区别

时间:2018-09-07 20:12:35

标签: swift generics inheritance protocols generic-constraints

我有一个协议A

protocol A { }

像这样实现协议B之间有什么区别:

protocol B: A { }

相对于这样实现它:

protocol B where Self: A { }

我对另一个不能做什么?我会在哪里遇到问题,而我可以通过将其切换到另一个解决此问题?

1 个答案:

答案 0 :(得分:4)

一个区别是遵守协议的方式。

在前一种情况下,符合B意味着符合A

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

在后一种情况下,要符合B,就必须符合A,但它不会隐式创建一个:

struct BImpl: A, B {} // `A` is explicitly required here