Причиной ошибки является FetchableRecord.Type
, равное , а не , такое же, как ModelA.Type
или ModelB.Type
. Даже если обе структуры соответствуют протоколу FetchableRecord
, ограничение моделей (в соответствии с определенным протоколом) не влияет на «типы», технически говоря:
ModelA.self == FetchableRecord.self
ИЛИ ModelB.self == FetchableRecord.self
false
.
Чтобы решить эту проблему, вы можете реализовать сигнатуру метода следующим образом:
func fetch(for theType: FetchableRecord.Type) -> [FetchableRecord] {
// ...
}
, поэтому ваш код:
let modelTypes: [FetchableRecord.Type] = [ModelA.self, ModelB.self]
modelTypes.forEach {
fetch(for: $0)
}
должен работать , На этом этапе вы имеете дело с этим «Гетерогенно» вместо «Гомогенно».
Кроме того, если это делает его более разумным, обратите внимание, что при вызове метода fetch
согласно вашей реализации, это:

тип параметра FetchableRecord.Protocol
. Однако, согласно вышеупомянутой реализации (в этом ответе), это:

тип параметра FetchableRecord.Type
, который является хотел результата.