Соответствие RowProtocol
требует сопоставления связанного типа T
с конкретным типом, а Row
этого не делает. Я предполагаю, что вы также хотите сделать Row
универсальным, поэтому вы не указали псевдоним типа для T
из протокола.
Решение состоит в том, чтобы сделать Row
также общим:
struct Row<T>: RowProtocol {
let cellClass: T.Type
init(cellClass: T.Type) {
self.cellClass = cellClass
}
}
Теперь компилятор доволен, поскольку у него есть конкретный тип для передачи RowProtocol
. Имейте в виду, что для компилятора T
из Row
отличается от T
из RowProtocol
, причем последний является требованием протокола, а первый - универсальным.
// exactly the same struct, but with different name for the generic argument.
struct Row<U>: RowProtocol {
let cellClass: U.Type
init(cellClass: U.Type) {
self.cellClass = cellClass
}
}