Swift - Как получить тип элемента массива в обобщенной функции - PullRequest
0 голосов
/ 27 июня 2019

Мне нужно получить тип элемента внутри обобщенной функции

let array = [String].self          -> Array<String>.Type
let element = array.Element.self   -> String.Type
JSONDecoder().decode(element, from: data) -> works fine

func foo<T>(type: T.Type) where T: Decodable{
    let element = type.Element      ->   Error. How to get element here?
    JSONDecoder().decode(element, from: data)
}

foo(array)

Как получить тип элемента внутри функции foo в этом примере?

1 Ответ

3 голосов
/ 27 июня 2019

Код работает, только если T ограничен Sequence, потому что только последовательности имеют тип Element.

И вам нужно добавить .self после Element

func foo<T>(type: T.Type) where T: Decodable, T : Sequence {
    print(type)
    print(type.Element.self)
}

И если вы хотите декодировать этот тип, вы должны ограничить Element Decodable, тоже

... where T: Decodable, T : Sequence, T.Element : Decodable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...