我有两个协议(Archivable
和Serializable
)和一个多次进行子类化的类(Model
)。许多子类实现Archivable
或Serializable
(或两者)。我想为Model
的{{1}}和Archivable
实施Serializable
的所有子项定义一个函数。这两项工作都是:
extension Serializable where Self: Model {
func fetch() { ... }
}
或
extension Serializable where Self: Archivable {
func fetch() { ... }
}
但是,我无法弄清楚如何扩展需要两种协议的地方。除了创建符合前两个协议的第三个协议之外还有其他选择吗?
答案 0 :(得分:30)
我认为这应该有效:
extension Archivable where Self: Model, Self: Serializable {
func fetch() { ... }
}
......或者相反:
extension Serializable where Self: Model, Self: Archivable {
func fetch() { ... }
}
答案 1 :(得分:2)
您可以使用协议的组合
extension Serializable where Self: Model & Archivable {
func fetch() { ... }
}