Я использую протокол для создания нескольких структур, которые я использую для декодирования с помощью JSONDecoder
. Вот пример кода того, чего я пытаюсь достичь.
protocol Animal: Codable
{
var name: String { get }
var age: Int { get }
}
struct Dog: Animal
{
let name: String
let age: Int
let type: String
}
struct Cat: Animal
{
let name: String
let age: Int
let color: String
}
Вот отдельные полезные данные JSON для собак и кошек:
{
"name": "fleabag",
"age": 3,
"type": "big"
}
{
"name": "felix",
"age": 2,
"color": "black"
}
Поэтому, когда я декодирую JSON, я не уверен, какой JSON у меня будет, собачий или кошачий. Я пытался сделать это:
let data = Data(contentsOf: url)
let value = JSONDecoder().decode(Animal.self, from: data)
Но в итоге с этой ошибкой:
В типе аргумента «Animal.Protocol» «Животное» не соответствует ожидаемому типу «Декодируемый».
Любые идеи относительно наилучшего подхода к разбору собаки или кошки, возвращающих экземпляр Animal
?
Спасибо