我有一组数据,使用Structs
进行建模,并符合Codable
和Equatable
enum FeedItemType: String, Codable {
case selling = "ITEM_FOR_SALE"
case facebook = "FACEBOOK_POST"
case tweet = "TWITTER_POST"
}
enum FeedItemStatus: String, Codable {
case created = "CREATED"
}
struct FeedItem: Codable, Equatable {
var item: FeedItemContent
var liked: Bool
var commented: Bool
private enum CodingKeys: String, CodingKey {
case liked, commented
case item = "feedItem"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.item = try container.decode(FeedItemContent.self, forKey: .item)
self.liked = try container.decode(Bool.self, forKey: .liked)
self.commented = try container.decode(Bool.self, forKey: .commented)
}
}
我对此数组进行迭代,并用UITableView
的内容填充FeedItemContent
,其中的内容本身也是Codable
和Equatable
。
由于此数据列表是分页的,可以在服务器端进行更新,因此在获取新数据时,而不是重新加载整个UITableView
,我只想对不同的行进行更改或追加新的行,原始收藏中缺少的。
从JS背景开始,我通常将旧对象和新对象散布在一个新的空对象上,然后让React找出发生了什么变化。
我不确定如何在Swift / iOS中实现这一目标。
答案 0 :(得分:1)
虽然您的问题有点难以理解,但是听起来您在尝试获取新数据时仅尝试更新表视图中的相关行。
有多种方法可以使用各种差异算法来实现此目的,但是我本人通常使用Dwifft来实现此目的,非常快速且极其轻巧。
Dwifft是一个小的Swift库,它告诉您“ diff”是什么 在两个集合之间,即一系列“编辑操作” 需要把一个变成另一个。它还带有UIKit 绑定,以自动,生动地保持 通过使UITableView / UICollectionView与一条数据同步 必要的行/节插入/删除请求作为数据 变化。
答案 1 :(得分:1)
如果在获取新数据时尝试仅更新tableview中的相关行,请使用Dwifft,因为它可以很好地满足您的目的。