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,它编译和运行完美,所以它看起来就像是已经固定的编译器错误。 –