У моего приложения iOS есть довольно распространенная настройка: он делает HTTP-запросы на сервер API, который отвечает объектами JSON. Затем эти объекты JSON обрабатываются соответствующими объектами Swift.
Первоначально я разделял свойства на требуемые свойства и дополнительные свойства, в основном на основе требований к базе данных API-сервера. Например, id
, email
и name
требуют полей, поэтому они используют необязательные типы. Другие могут быть NULL
в базе данных, поэтому они являются необязательными типами.
class User {
let id: Int
let email: String
let profile: String?
let name: String
let motive: String?
let address: String?
let profilePhotoUrl: String?
}
Недавно я начал задаваться вопросом, действительно ли это была хорошая настройка. Я обнаружил, что, хотя некоторые свойства могут всегда находиться в базе данных, это не означает, что эти свойства всегда будут включены в ответ JSON.
Например, на странице профиля пользователя все эти поля необходимы для правильного отображения представления. Поэтому ответ JSON будет включать все эти поля. Однако для представления, в котором перечислены имена пользователей, мне не нужна email
или id
, и ответ JSON, вероятно, не должен включать эти свойства. К сожалению, это приведет к ошибке и сбою приложения при анализе ответа JSON на объект Swift, так как приложение ожидает, что id
, email
, name
всегда не ноль.
Я думаю об изменении всех свойств объектов Swift в опции, но это похоже на то, чтобы избавиться от всех преимуществ этой специфической для языка функции. Более того, мне придется писать еще много строк кода, чтобы развернуть все эти опции в другом месте приложения.
С другой стороны, объекты JSON по своей природе не очень совместимы со строгой статической типизацией и проверкой нуля Swift, поэтому было бы лучше просто принять это раздражение.
Должен ли я переходить к моделям со всеми свойствами в качестве опциональных? Или есть лучший способ? Я был бы признателен за любые комментарии здесь.