Я сейчас экспериментирую с Generics в Swift и столкнулся с некоторой проблемой с приведением некоторых типов, таких как SomeType<Protocol>
к SomeType<ProtocolImpl>
. Таким образом, в основном у меня есть некоторый тип, который принимает параметр generic c, который обрабатывается как протокол и который позднее приводится к более конкретному типу. Мой вопрос, если это невозможно сделать?
/// 'dict' is of type [String: SomeType<Protocol>]
if let element = dict["str"], // 'element' here is of type SomeType<Protocol>
let castedElement = element as? SomeType<ProtocolImpl> { // This is always false
return castedElement // Here I want to return castedElement with type SomeType<ProtocolImpl>
}
Есть ли способ заставить этот актерский состав работать? Я уже работаю над другим решением для моей проблемы, но мне все еще интересно, есть ли способ как-то сделать эту работу.
Редактировать: потому что @jtbandes хотел пример, который он может вставить куда-нибудь, здесь:
class SomeType<T> {
let value: T
init(value: T) {
self.value = value
}
}
protocol Protocol {}
class ProtocolImpl: Protocol {}
var dict: [String: SomeType<Protocol>] = ["str": SomeType(value: ProtocolImpl())]
if let element = dict["str"],
let castedElement = element as? SomeType<ProtocolImpl> {
print(castedElement.value) // I want to get here
}