У меня есть экран результатов поиска с 4 различными вкладками: Игрок, Группы< /strong>, Совпадения (три категории) и Последние (общие), каждый из которых имеет свои собственные связанные API и представления для отображения объектов. Ответы API содержат массив связанных объектов. API Player и Matches имеют в своих ответах только один тип моделей, тогда как массив Groups содержит один тип объекта, но некоторые из них имеют дополнительное поле. Recent API имеет массив, содержащий все три типа объектов и некоторые дополнительные поля для объекта Player.
Три экрана имеют разные представления для отображения объектов. в то время как список экрана Последние использует все три представления, но находится внутри охватывающего представления с дополнительной кнопкой для удаления объекта из массива.
Пример API : (более короткий измененный ответ для примера)
Player API
Код: Выделить всё
{
"status": "SUCCESS",
"message": "Successful response.",
"data": [
{
"id": 7, //Mandatory field
"playerName": "Ronaldo", //Mandatory field
"nickname": "CR7",
"positions": "Striker, Winger, Forward",
"place": "Portugal",
"height": null,
"category": "PLAYER" //Mandatory field
},
{
"id": 10,
"playerName": "Messi",
"nickname": null,
"positions": "Winger, Forward",
"place": "null",
"height": null,
"category": "PLAYER"
}
]
}
Код: Выделить всё
"data": [
{
"id": 1,
"title": "Pool Match 1",
"poolId": 1,
"court": "Santiago Bernabeu",
"searchHistoryId": null,
"category": "MATCHES"
},
...
]
Код: Выделить всё
"data": [
{
"id": 1,
"title": "Mavericks",
"subCategory": "TEAM",
},
{
"id": 2,
"title": "East Side",
"subCategory": "cluster",
"subCategoryGroupID": 4
}
]
Код: Выделить всё
"data": [
{
"id": 1,
"title": "Pool Match 1",
"poolId": 1,
"court": "Santiago Bernabeu",
"searchHistoryId": null,
"category": "MATCHES"
},
{
"id": 1,
"title": "Mavericks",
"subCategory": "TEAM",
"category": "GROUPS",
"subCategoryGroupID": null,
"subCategoryURL": null
},
{
"id": 7,
"playerName": "Ronaldo",
"nickname": "CR7",
"positions": "Striker, Winger, Forward",
"place": "Portugal",
"height": null,
"category": "PLAYER",
"injuryStatus": "Healthy", //Additional field
"bloodGroup": null //Additional field
}
]
Код: Выделить всё
protocol SearchItem {
id: Int { get set }
category: String { get set }
}
struct PlayerSearchItem: SearchItem {
id: Int
category: String
playerName: String
...
}
struct MatchesSearchItem: SearchItem {
...
Код: Выделить всё
switch data.category {
case SearchCategory.Player.rawValue:
let playerData: PlayerSearchItem = data as? PlayerSearchItem
PlayerSearchItemView(data: playerData)
case SearchCategory.Matches.rawValue:
let matchData: MatchesSearchItem = data as? MatchesSearchItem
MatchesSearchItemView()
...
Подробнее здесь: https://stackoverflow.com/questions/786 ... s-in-swift
Мобильная версия