【发布时间】:2020-05-05 11:19:54
【问题描述】:
我有一个名为Product 和viewModel 的模型名为productViewModel。
Product Model 的属性很少,但例如,假设它只有 name 和 price。
这是产品:
struct product {
private let name: String
private let price: Float
}
我创建了一个这样的视图模型:
struct productViewModel {
private let product: Product
private let isFavorite: Bool
init(product: Product, favorite: Bool = false) {
self.product = product
self.isFavorite = favorite
}
}
如您所见,productViewModel 具有模型没有的 isFavorite 字段。
我有一个从服务器获取Products 的函数。
我想用它填充viewModel 数组,并检查每个产品是否在favorites table 中(设备本身的本地表,使用SQLite)
我想过这样的事情:
private func populateViewModel() {
for p in popularProducts {
let favorite = favoritesTable.contains(p)
let model = ProductViewModel(product: p, isFavorited: favorite)
viewModels.append(model)
}
}
在我从服务器得到一个产品列表后,调用这个populateViewModel函数,但它似乎真的效率不高,但我想不出别的。
【问题讨论】:
-
不太确定您在问什么,但您不能将
isFavorite添加到您的模型结构中吗? -
我不这么认为。我的意思是,从技术上讲我可以,但由于 isFavorite 可以是真或假取决于用户,我真的不想将它添加到数据库中。例如,名称和价格是通用的,应该在每个设备上显示相同,isFavorite 不是,所以我真的不想这样做。
-
好的,有道理。那么当你说“它似乎真的没有效率”时,你到底是什么意思?
-
@koen 似乎这太多了,每次我获取数据时,运行一个循环来填充另一个数组,然后我还应该确保数组被填充并且是当我尝试使用它时不为空,等等。
-
如果你担心经常访问你的 SQLite 表,也许
populateViewModel的所有者可以保留一个局部变量,或者可能将信息存储在UserDefaults中。