Расширение протокола в Swift Где объект является классом и соответствует протоколу

У меня есть два протокола (Archivable и Serializable) и класс (Model), который несколько раз подклассифицирован. Многие подклассы реализуют либо Archivable, либо Serializable (или оба). Я хотел бы определить функцию для всех дочерних элементов Model, которые реализуют как Archivable, так и Serializable. Обе эти работы:

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

или

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

Однако я не могу понять, как расширить, где требуются оба протокола. Есть ли другие возможности, кроме создания третьего протокола, который соответствует первым двум?

Ответ 1

Я думаю, что это должно сработать:

extension Archivable where Self: Model, Self: Serializable {

    func fetch() { ... }

}

... или наоборот:

extension Serializable where Self: Model, Self: Archivable {

    func fetch() { ... }

}