【发布时间】:2018-04-05 12:01:34
【问题描述】:
在 MVC 模式中,视图是否应该包含它所呈现的模型?
例如,我有一个 Item 模型,ItemsListView 和 ItemRowView 来显示它。 为了显示列表,我应该将 Item 模型传递给 ItemRowView (1) 还是可以将 Item.title、Item.details、Item.image 等传递给 ItemRowView (2)
在(1)中,违反了MVC设计模式,View不直接与Model对话,View也可以调用Model方法
在(2)中,当使View dummy时,如果在另一个ViewController中,我们使用ItemsList获得增益,我们必须再次复制传递的参数,如果我们需要向用户传递更多的属性会发生什么?
还有另一种方式,使用 ViewModel 包裹 Model 来处理 UI Logic,但这会创建很多类,并且每次我得到一个模型列表时,我还必须将它映射到 ViewModels
示例:
class ItemModel {
var name: String = ""
var price: Double = 9000
}
我是否应该像这样将模型分配给 UITableViewCell:(这样单元格可以在新数据到来时自行更新数据)
class ItemTableViewCell: UITableViewCell {
@IBOutlet var titleLabel: UILabel!
var item: ItemModel! {
didSet {
self.updateUI()
}
}
func updateUI() {
titleLabel.text = item.name
}
}
或者我应该保持单元格虚拟,并在 ViewController 中更新 UI:
class ItemTableViewCell: UITableViewCell {
@IBOutlet var titleLabel: UILabel!
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: ItemTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ItemTableViewCell", for: indexPath)
var item = items[indexPath.row]
cell.titleLabel.text = item.name
return cell
}
【问题讨论】:
-
你能给出代码示例吗?我不确定我是否完全理解你的例子......
-
您好,很抱歉这个问题。我已经更新了
标签: model-view-controller view model