Я пишу некоторый код, который в идеале мог бы работать с чем угодно, на что можно подписать String
.Вот пример:
class MyClass {
func getValue<DataSource>(key: String, from dataSource: DataSource) -> Any? where DataSource: Collection, DataSource.Index == String {
return dataSource[key]
}
}
let data: [String: Any] = [
"why": "is this not working"
]
MyClass().getValue(key: "why", from: data) // Compile error!
Я получаю ошибку Generic parameter "DataSource" could not be inferred
.Я не могу понять, почему это неверный код.У меня есть ощущение, что есть некоторый нюанс ковариации / контравариантности, который я не усвоил должным образом.В любом случае, возможно ли даже выполнить то, что я пытаюсь сделать?