Ваша идея с таблицей свидетелей - красная сельдь, потому что нет кода и нет отправки.Это намного проще, чем это.Оба протокола являются просто инструкциями о том, как создать принимающий тип;они говорят «сделай это», и в своем усыновителе вы это делаете, поэтому вы соответствуете обоим требованиям.Нет проблем.
Если бы это были методы с расширениями и реализациями, теперь нам есть о чем поговорить!Например:
protocol A {
func f()
}
extension A {
func f() { print("A")}
}
protocol B {
func f()
}
extension B {
func f() { print("B")}
}
class C:A,B {} // compiler stops you, rightly
Разве этот код не пахнет по своей природе?Или есть обстоятельства, когда это действительно может быть полезно?
Это не плохой запах, и на самом деле, в очень реальном смысле, такие вещи случаются постоянно в стандартной библиотеке.В конце концов, какова иерархия протокола, но пример того, что вы обрисовываете в общих чертах?Сказать, что протокол P2 принимает протокол P1 - это всего лишь сокращение от того, чтобы сказать, что все, что требует P1, P2 также требует.