【问题标题】:Populating viewModel array with model使用模型填充 viewModel 数组
【发布时间】:2020-05-05 11:19:54
【问题描述】:

我有一个名为ProductviewModel 的模型名为productViewModelProduct Model 的属性很少,但例如,假设它只有 nameprice

这是产品:

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 中。

标签: ios swift mvvm


【解决方案1】:
private func populateViewModel() {
    for p in popularProducts {
        if p.isFavorite{ //it is favorited
            let model = ProductViewModel(product: p, isFavorited: favorite)
            viewModels.append(model)
        }
    }
}

【讨论】:

  • 谢谢,我最终创建了模型数组并填充它。我设置在模型中编写了 isFavorite 部分,并在需要时使用它。
猜你喜欢
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多