Swift中的协议扩展,其中对象是一个类并且符合协议

时间:2015-10-26 22:52:24

标签: swift

我有两个协议(ArchivableSerializable)和一个多次进行子类化的类(Model)。许多子类实现ArchivableSerializable(或两者)。我想为Model的{​​{1}}和Archivable实施Serializable的所有子项定义一个函数。这两项工作都是:

extension Serializable where Self: Model {
  func fetch() { ... }
}

extension Serializable where Self: Archivable {
  func fetch() { ... }
}

但是,我无法弄清楚如何扩展需要两种协议的地方。除了创建符合前两个协议的第三个协议之外还有其他选择吗?

2 个答案:

答案 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() { ... }
}