【发布时间】:2014-09-12 12:40:03
【问题描述】:
我正在使用集合视图来显示从服务器接收到的数据。返回的预订的 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 数组映射到部分和项目。在反序列化 JSON 和数据转换后的 Swift 中,它看起来像这样(键是 property_id,值是该 property_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: 是必需的)。
我正在考虑在 bookings 数组上设置一个只读计算属性来执行数据转换。但它可能会对性能产生影响。如果计算属性不是一个选项,我如何使这两个数据结构保持同步?
【问题讨论】:
-
@Rob Napier 几天前写了一篇关于“扁平化映射”的帖子。看看here。
-
你会考虑使用 CoreData 来存储这些信息吗?
-
@POB 谢谢,我正在阅读。
-
@pbasdf 没有 CoreData,但有一个 RESTful api 来保留预订。