2
我想在子類雨燕的通用類,但無論我做什麼,編譯器只是不斷抱怨,或者更糟,段錯誤。子類泛型類
這是我編譯它時最接近的,但後來我無法創建子類的實例,因爲編譯器出於某種原因無法推斷出什麼是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,它編譯和運行完美,所以它看起來就像是已經固定的編譯器錯誤。 –