Swift Covariant Generics

Viewed 2301

Here is an example of what I'd like to achieve:

protocol SomeType {}

class SomeClass: SomeType {}

struct SomeGenericStruct<A> {
    typealias E = A
}

func take(someType: SomeGenericStruct<SomeType>) {}

let concreteGenericStruct1: SomeGenericStruct<SomeType> = SomeGenericStruct<SomeType>()
let concreteGenericStruct2: SomeGenericStruct<SomeClass> = SomeGenericStruct<SomeClass>()

take(concreteGenericStruct1)
take(concreteGenericStruct2) // much no work, very repair. wow.

Or even simpler:

let concreteGenericStruct3: SomeGenericStruct<SomeType> = SomeGenericStruct<SomeClass>() as SomeGenericStruct<SomeType> // still no work

How can I manage to provide take with concreteGenericStruct2?

1 Answers
Related