Это довольно специфическая ситуация, поэтому я постараюсь объяснить как можно больше деталей.
Я создаю приложение, которое должно получить список резервирований, где можно либо добавить новое, либо нажать на существующее резервирование и получить «подробный» вид резервирования, где детали резервирования можно редактировать, а затем возможность сохранить его.
REST API были сделаны в C #, и нет документации о том, что может и не может быть нулевым (ноль, в случае Swift). Итак, я заканчиваю с:
struct Reservation: Codable {
var objectID: String?
var objectName: String?
var objectPrefix: String?
var reservationNumber: String?
var grownUPS: Int?
var teens: Int?
var children: Int?
var babies: Int?
var reservationDate: String?
var dateInserted: String?
var toDate:String?
var fromDate: String?
var price: Int?
var owner: String?
var note: String?
var agencyName: String?
var renterNote: String?
var reservationID: String?
// 20 more properties
init(objectID: String? = nil,
partnerID: String? = nil,
objectName: String? = nil,
// 20 more properties
)
{
self.objectID = objectID
self.objectName = objectName
// 20 more properties
}
Поэтому, когда я нажимаю на объект, я передаю объект Reservation, проверяю каждое поле, если не ноль, затем устанавливаю TextField. При нажатии кнопки «Сохранить» я обновляю модель из всех полей TextFields, DatePickers и т. Д., А затем выполняю сетевую публикацию или отправляю запрос в зависимости от того, существует ли новое резервирование или редактирование.
Если я нажимаю на добавить, я пропускаю пустой объект Reservation, поэтому все поля на странице «детали» пусты, и выполняю проверку при нажатии кнопки Save.
Пока это работает, но все вокруг выглядит "Anti-Swift". Множество опций, много защитников / распаковок, тесная связь между «основным» и «подробным» представлениями, настройка данных, извлекаемых из сети в закрытом состоянии (фактический вызов Alamofire скрыт, но я не уверен, что будет ноль, поэтому я необходимо установить для каждого свойства его TextField с нулевой проверкой / цепочкой).
Какие-нибудь советы по архитектуре, как это улучшить?
Все учебные пособия посвящены простому, локальному, необязательному подходу, благодаря которому все выглядит блестяще.
Имейте в виду, что у меня нет документации о том, что может быть нулевым (данные, ранее введенные через Интернет или из внутреннего настольного приложения).