Сопоставление NSIndexPaths с идентификаторами данных

Я использую представление коллекции для отображения данных, полученных с сервера. Возвращаемый массив json возвращает:

[
 {
 "id": 13644766,
 "check_in": "2014-04-22",
 "check_out": "2014-04-29",
 "property_id": 1980
 },
 {
 "id": 13644763,
 "check_in": "2014-04-22",
 "check_out": "2014-04-29",
 "property_id": 1978
 },
 {
 "id": 13644761,
 "check_in": "2014-04-22",
 "check_out": "2014-04-29",
 "property_id": 2591
 },
 {
 "id": 13644764,
 "check_in": "2014-04-22",
 "check_out": "2014-04-29",
 "property_id": 1978
 }
]

Я использую представление коллекции для отображения данных и должен реализовать протокол UICollectionViewDataSource. Более конкретно, раздел содержит все заказы с тем же свойством property_id. Поэтому мне нужно сделать преобразование данных для сопоставления массива json с разделами и элементами. В Swift после deserializingJSON и преобразования данных это выглядит так (ключ - property_id, а value - массив заказов для этого свойства_id):

[
 1980: [["id": 13644766, "check_in": "2014-04-22", "check_out": "2014-04-29"]],
 1978: [
 ["id": 13644763, "check_in": "2014-04-22", "check_out": "2014-04-29"]
 ["id": 13644764, "check_in": "2014-04-22", "check_out": "2014-04-29"]
 ],
 2591: [["id": 13644761, "check_in": "2014-04-22", "check_out": "2014-04-29"]]
]

Но я хотел бы сохранить простой массив в слое модели, а не в словаре массивов, потому что проще выполнять операции CRUD на нем, чем на словаре массивов.

В общем, я спрашиваю следующее: как я могу обрабатывать форматирование данных из моделей для просмотра контроллеров (необходимо для методов источника данных numberOfSectionsInCollectionView: collection:numberOfItemsInSection: и collectionView:cellForItemAtIndexPath:.

Я думаю, чтобы иметь только вычислительное свойство только для чтения в массиве заказов, который выполняет преобразование данных. Но это может повлиять на производительность. Если вычисленное свойство не является вариантом, как я могу синхронизировать эти две структуры данных?

1 ответ

Во-первых, я настоятельно рекомендую вам преобразовать ваш массив словарей в массив объектов. JSON следует анализировать до объектов модели, а не до словарей. Я пишу сериал о таком разборе, начиная с Functional Wish Fulfillment, но вы можете использовать любую технику, которую вы хотите провести синтаксический анализ. Просто введите его в объекты (часто это структуры в Swift). Тогда у вас будет простой массив.

Кроме того, растущее предпочтение решить "как показать это" в разных кругах cocoa - это переход от традиционной архитектуры MVC к архитектуре MVVM. В архитектуре MVVM вы добавляете дополнительный слой "View Model" между ViewController и Model. Работа ViewModel заключается в том, чтобы массировать данные в форме, в которой должны отображаться слои отображения. Это может потребоваться или не понадобиться, если у вас есть хороший объект в вашей модели. Но если ваш дизайн модели точно не соответствует вашим потребностям в View, ViewModel является хорошим посредником.

licensed under cc by-sa 3.0 with attribution.