Matrices de genéricos en Swift

He estado jugando con matrices de clases genéricas con diferentes tipos. Es más fácil explicar mi problema con un código de muestra:

// Obviously a very pointless protocol...
protocol MyProtocol {
    var value: Self { get }
}

extension Int   : MyProtocol {  var value: Int    { return self } }
extension Double: MyProtocol {  var value: Double { return self } }

class Container<T: MyProtocol> {
    var values: [T]

    init(_ values: T...) {
        self.values = values
    }

    func myMethod() -> [T] {
        return values
    }
}

Ahora si trato de crear una matriz de contenedores así:

var containers: [Container<MyProtocol>] = []

Me sale el error:

El protocolo 'MyProtocol' solo se puede usar como una restricción genérica porque tiene requisitos de tipo Self o asociados.

Para arreglar esto puedo usar[AnyObject]:

let containers: [AnyObject] = [Container<Int>(1, 2, 3), Container<Double>(1.0, 2.0, 3.0)]
// Explicitly stating the types just for clarity.

Pero ahora surge otro 'problema' al enumerar a través decontainers:

for container in containers {
    if let c = container as? Container<Int> {
        println(c.myMethod())

    } else if let c = container as? Container<Double> {
        println(c.myMethod())
    }
}

Como puede ver en el código anterior, después de determinar el tipo decontainer Se llama el mismo método en ambos casos. Mi pregunta es:

¿Hay una mejor manera de obtener elContainer con el tipo correcto que lanzar a cada tipo posible deContainer? ¿O hay algo más que he pasado por alto?

Respuestas a la pregunta(5)

Su respuesta a la pregunta