Я реализую обобщенную коллекцию c, и я хотел бы сделать ее использование с иерархией типов / протоколов более удобным. Я наткнулся на следующий вопрос:
Как реализовать коллекцию
class SpecialSet<ObjectType> {
Так, что при двух типах B : A
можно выполнить неявное преобразование SpecialSet<B>
в SpecialSet<A>
?
Я удивлен, но не смог найти никакой документации, объясняющей эту простую концепцию, которая действительно существует для коллекции Array. Этот быстрый код действительно действителен:
let b = [B(), B(), B()]
let a: [A] = b
Я, вероятно, не использовал правильный словарь в своих поисках.
Я попытался определить конструктор следующим образом, но он не позволяет реализовать наследование между двумя родовыми c.
init<T>(_ specialSet: SpecialSet<T>) where T: ObjectType {