У меня есть такой протокол:
protocol ModelProtocol{
func parse<T.Model>(data: Data) -> Array<T>? {}
}
Возвращаемое значение представляет собой массив значений параметров. Метод принимает данные, анализирует их и возвращает массив проанализированных объектов из данных API.
Тип данных, которые возвращает API, называется MyData
, для которого в качестве значения словаря используется массив.
Я анализирую JSON вот так
func parse<T>(data: Data) -> Array<T>? {
do {
let newJSONDecoder = JSONDecoder()
let menu = try newJSONDecoder.decode(MyData.self, from:data)
let dataArray = menu.data //array
let modelArray = Array<T>()
for object in dataArray {
modelArray.append(object)
}
return modelArray
}
catch {
print("error while parsing:\(error.localizedDescription)")
return nil
}
}
Я получаю сообщение об ошибке в строке, в которую добавляюсь в возвращаемый массив.
Невозможно вызвать 'append' со списком аргументов типа '(MyData.Drinks)'
В конечном итоге я хочу, чтобы в возвращаемом массиве были объекты типа, который находится в массиве MyData.data
- в данном случае типом является Drinks
. Но в более широком смысле я хочу, чтобы метод возвращал любой тип из любой полезной нагрузки JSON. Цель состоит в том, чтобы создать метод, который может принимать любые данные и возвращать любой объект как проанализированный объект типа X в массиве.
Как мне это сделать?