В настоящее время я работаю с API, который имеет дело с предсказаниями шины. С JSON есть интересная особенность, которая возвращается для прогнозов определенной остановки. Когда есть несколько прогнозов для остановки, JSON выглядит примерно так:
...
"direction": {
"prediction": [
{
"affectedByLayover": "true",
"block": "241",
"dirTag": "loop",
"epochTime": "1571785998536",
"isDeparture": "false",
"minutes": "20",
"seconds": "1208",
"tripTag": "121",
"vehicle": "1698"
},
{
"affectedByLayover": "true",
"block": "241",
"dirTag": "loop",
"epochTime": "1571787798536",
"isDeparture": "false",
"minutes": "50",
"seconds": "3008",
"tripTag": "122",
"vehicle": "1698"
},
{
"affectedByLayover": "true",
"block": "241",
"dirTag": "loop",
"epochTime": "1571789598536",
"isDeparture": "false",
"minutes": "80",
"seconds": "4808",
"tripTag": "123",
"vehicle": "1698"
}
],
"title": "Loop"
}
...
Однако, когда есть только один прогноз для остановки, JSON выглядит следующим образом:
...
"direction": {
"prediction":
{
"affectedByLayover": "true",
"block": "241",
"dirTag": "loop",
"epochTime": "1571785998536",
"isDeparture": "false",
"minutes": "20",
"seconds": "1208",
"tripTag": "121",
"vehicle": "1698"
}
"title": "Loop"
}
...
Обратите внимание, что «предсказание» больше не находится внутри массива - вот где я считаю, что все усложняется при использовании типа Swift Codable для декодирования JSON. Моя модель выглядит следующим образом для «направления» и «предсказания»
struct BTDirection: Codable {
let title: String!
let stopTitle: String!
let prediction: [BTPrediction]!
}
struct BTPrediction: Codable {
let minutes: String!
let vehicle: String!
}
В основном происходит то, что prediction
в BTDirection
ищет массив BTPrediction, однако во втором случае выше,это не будет массив, поэтому декодирование не удастся. Как я могу сделать свои модели более гибкими для размещения как массива, так и одного объекта? В идеале во втором случае prediction
все равно будет массивом из одного BTDirection
. Любая помощь по этому вопросу будет высоко ценится.