私はSwiftで汎用クラスをサブクラス化しようとしていますが、コンパイラが何を問題にしても、segfaultingを続けても問題はありません。汎用クラスをサブクラス化する
これは私がコンパイルするのにもっとも近いものですが、コンパイラが何らかの理由でT
が何であるかを推測できないため、サブクラスのインスタンスを作成できません。
protocol GenericDataSourceCellProtocol {
associatedtype ModelType
var model: ModelType? {get set}
}
struct MyCellState {}
class MyCell: UITableViewCell, GenericDataSourceCellProtocol {
var model: MyCellState?
}
class Generic2DDataSource<U, T>
where U:GenericDataSourceCellProtocol, U:UITableViewCell, T == U.ModelType {
let items: [[T]]
init (items: [[T]]) {
self.items = items
}
}
class SubclassedDataSource: Generic2DDataSource<MyCell, MyCellState> {}
let state = MyCellState()
let items = [[state]]
let datasource = SubclassedDataSource(items: items)
// cannot convert value of type '[Array<MyCellState>]' to expected argument type '[[T]]'
この方法を使用する方法はありますか?私は何が欠けていますか?
偉大な答えであり、間違いなく問題を解決しました、ありがとう!私は、他の誰かが私の元の例でコンパイラの動作についての説明を思い付くことができるかどうかを知りたいので、あなたの答えを受け入れる前に数日待つことになります。もう一度ありがとう、私はそれを調べる時間を割いていただきありがとうございます! – Rog
私も興味があります。 –
@Rog私はあなたのコードをXcode 9b6に入れてコンパイルして完全に動いたので、修正されたコンパイラのバグのようです。 –