Массивы Обобщения в Swift

Я играл с массивами общих классов с различными типами. Проще всего объяснить мою проблему с помощью некоторого примера кода:

// 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
    }
}

Теперь, если я попытаюсь создать массив контейнеров так:

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

Я получаю ошибку:

Протокол «MyProtocol» может использоваться только в качестве общего ограничения, поскольку он имеет Self или требования к связанному типу.

Чтобы исправить это я могу использовать[AnyObject]:

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

Но теперь возникает другая «проблема» при перечислении черезcontainers:

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())
    }
}

Как видно из приведенного выше кода, после определения типаcontainer один и тот же метод вызывается в обоих случаях. Мой вопрос:

Есть ли лучший способ получитьContainer с правильным типом, чем приведение к каждому возможному типуContainer? Или я что-то упустил из виду?

Ответы на вопрос(2)

Ваш ответ на вопрос