Вы не можете использовать протокол со связанным типом так же, как и обычный протокол, но вы можете использовать DataSource
в качестве ограничения типа в SomeClass
следующим образом:
class SomeClass<T, D:DataSource> where D.DataItem == T {
private let dataSource:D
init(dataSource: D) {
self.dataSource = dataSource
}
func getSomeStuff() -> T {
return dataSource.getItem(at: 0)
}
}
let sc = SomeClass<Int, DataSourceAgent>(dataSource: DataSourceAgent())
print(sc.getSomeStuff())