Swift - 继承协议(protocol)和将 Self 约束到协议(protocol)之间的区别

标签 swift generics inheritance protocols generic-constraints

我有一个协议(protocol)A:

protocol A { }

像这样实现协议(protocol) B 有什么区别:

protocol B: A { }

与这样实现相比:

protocol B where Self: A { }

?

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

最佳答案

一个区别在于您如何遵守协议(protocol)。

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

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

在后一种情况下,对 B 的一致性需要对 A 的一致性,但它不会隐式地创建一个:

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

关于Swift - 继承协议(protocol)和将 Self 约束到协议(protocol)之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52229096/

相关文章:

ios - 从中心变换 UIView

swift - 在 SwiftUI 类中调用包装的 UIViewController 函数时获取 nil

c# - 向下转换通用元素类型

java - 将泛型类型参数标记为 Java 8 中的功能接口(interface)

java - 在 List(两种变体)、Set(两种变体)、Queue、Deque 中转换 int、long、boolean、String、double

Java,扩展File以获得更多属性

Swift UIPasteboard 不复制 PNG

c# - ASP.NET UserControl 继承 - 从基类获取派生类控件

java - 继承和对象创建

包含特殊字符的 Swift 字符串