Нет, это не представляется возможным, потому что нет нет общего типа предок CellDataA
и CellDataB
. Вы могли бы подумать, что CellDataBase
является общим предком, но это не так; введение параметра типа U
означает, что для каждого типа U
существует совершенно различный тип.
Вы могли бы попробовать что-то вроде этого:
protocol CellDataBase {
// avoid `Self` and `associatedType`
// ...
var count : UInt { get } // number of items in database..
// ...
}
public class StandardCellDataBase<U: CellBase> : CellDataBase { ... }
class CellDataA: StandardCellDataBase <CellA> { }
class CellDataB: StandardCellDataBase <CellB> { }
, а затем:
var databases = [CellDataBase]()
Обратите внимание, что определение CellDataBase
как протокол, избежать «требования Самостоятельное и связанные с ними типы» может быть трудно, в зависимости от твои нужды.
====
Другой подобный вариант, если вы не можете изменить свое определение CellDataBase
является определение другого протокола и добавить его в качестве дополнения к CellDataBase
. Например:
protocol GenericCellDataBase {
var count : UInt { get }
}
extension CellDataBase : GenericCellDataBase {
var count : UInt { return ... }
}
var databases = [GenericCellDataBase]()
Хорошая точка, я заменил «протокол CellDataBase» на класс CellDataBase и он также работает. – Leo