Я пытаюсь создать служебную функцию, которая дает некоторые Data
и struct
, который соответствует Decodable
, может декодировать данные JSON в структуру следующим образом:
func decodeDataToModel(data : Data?, model : Decodable) -> Decodable? {
guard let data = data else { return nil }
let object : Decodable?
do {
object = try JSONDecoder().decode(model, from: data)
} catch let decodeErr {
print("Unable to decode", decodeErr)
}
return object
}
Это выдает ошибку: Cannot invoke decode with an argument list of type (Decodable, from: Data)
. Как я могу заставить эту функцию работать с любой произвольной структурой, которую я могу передать в качестве модели?
Например, если у меня есть:
struct Person : Decodable {
let id : Int
let name: String
}
struct Animal : Decodable {
let id : Int
let noOfLegs: Int
}
Я хочу иметь возможность использовать его вот так
let animal = decodeDataToModel(someData, from: Animal.self)
let human = decodeDataToModel(someOtherData, from: Person.self)