Какой самый чистый/стандартный способ написания моделей в Swift? [закрыто]IOS

Программируем под IOS
Ответить
Anonymous
 Какой самый чистый/стандартный способ написания моделей в Swift? [закрыто]

Сообщение Anonymous »

Я все еще новичок и сейчас работаю над проектом SwiftUI. Я хотел знать, какие стандартные методы или вещи следует учитывать при написании моделей на Swift. Я нигде не смог найти подробного руководства по этому вопросу, и у меня нет образования в CS. Я использовал общий протокол и три структуры, соответствующие этому протоколу. Ради знаний я хотел знать, есть ли лучший способ.
У меня есть экран результатов поиска с 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"
}
]
}
** Соответствует** API

Код: Выделить всё

"data": [
{
"id": 1,
"title": "Pool Match 1",
"poolId": 1,
"court": "Santiago Bernabeu",
"searchHistoryId": null,
"category": "MATCHES"
},
...
]
Groups API (некоторые объекты имеют дополнительное поле в зависимости от их подкатегории).

Код: Выделить всё

"data": [
{
"id": 1,
"title": "Mavericks",
"subCategory": "TEAM",
},
{
"id": 2,
"title": "East Side",
"subCategory": "cluster",
"subCategoryGroupID": 4
}
]
Последний API:

Код: Выделить всё

"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 {
...
На экране Последние я сохранил данные в массиве [SearchItem] и внутри представления контейнера, в случае переключения на основе Тип «категория», приведите объект как! PlayerSearchItem или как! MatchesSearchItem, а затем передать его соответствующему представлению.

Код: Выделить всё

 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()
...
Было бы полезно, если бы вы рассказали, как я могу это улучшить. Также о важных вещах, которые следует учитывать в целом, например, при написании моделей данных или обработке моделей ответов API и соответствующих им моделей данных. Было бы лучше использовать классы?

Подробнее здесь: https://stackoverflow.com/questions/786 ... s-in-swift
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»