Быстрое получение типа элемента массива generi c - PullRequest
0 голосов
/ 29 мая 2020
  1. Как определить, что Swift Generi c - это массив?
  2. Как создать экземпляр массива определенных c элементов?

Думаю, я закончил решения. Спасибо за любую помощь.

В аналогичной ситуации:

var value: Any?
func get() -> T? {

    switch T.self {

    case is Int:
        return Int(self.value) as? T

    case let MT as MyProtocol.Type:

        return MT.init(self.value) as? T // Perfectly

    case let MTA as Array<MyProtocol>.Type: // <== Never case, why?

        let values = self.valueAsEEArray()
        return values?.map { TMA.Element.init($0) } as? T
//                                       ^ Protocol type 'Array<MyProtocol>.Element' (aka 'MyProtocol') cannot be instantiated
protocol MyProtocol {
    init(_ value: EE)
}

1 Ответ

0 голосов
/ 29 мая 2020

Все, что вам нужно, это просто написать еще одну функцию с массивом возвращаемых типов T:

func get() -> [T] {
  //Code
}
...