Работа со Swift Optionals и частичным представлением / ответами JSON в REST

Если мой REST API может отправлять частичные ответы обратно (как указано здесь: https://developers.google.com/gmail/api/guides/performance), лучше ли сделать все мои свойства в моих объектах Swift необязательными? Или есть другой способ справиться с этим?

Например, мой пользовательский объект:

public struct User: Decodable {
    var id: Int
    var firstName: String
    var lastName: String
    var phoneNumber: String?
    var verified: Bool
}

В БД только номер телефона не обязателен, все остальные обязательны. Следовательно, только номер телефона в моем быстром объекте помечен как необязательный. Однако когда дело доходит до ответов API, не все запросы для пользовательских объектов будут содержать все необходимые свойства. Например, если мне нужно знать, какие пользователи проверены (GET / users? Verified = true & fields = id), мой ответ будет просто набором идентификаторов пользователей.

Означает ли это, что в Swift мне нужно пометить все свойства, кроме id, как необязательные?

Связанный вопрос по SO: Следует ли использовать optional для свойств объектных моделей, которые будут анализироваться из JSON?

В моем случае сервер предоставит всю информацию о пользователях, и это не будет проблемой, если все свойства не являются необязательными. Но если информация об использовании превышает размер, я предпочитаю создать новую структуру, например UserForDisplay, которая просто включает необходимые свойства.

Klein Mioke 02.05.2018 05:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
74
1

Ответы 1

Если вы получаете только идентификаторы, вы можете создать другой объект для его декодирования:

public struct IdList: Decodable {
  var ids:[String]
}

Другие вопросы по теме