【发布时间】:2017-12-25 15:29:48
【问题描述】:
我正在使用UITableView 在 Swift 中开发 MVVM 架构。为此,我创建了示例表视图。
谁能建议我是否正确或需要做任何其他改进?
以下是此架构的类。
-
ViewController - 包含
UITableView及其delegate和datasource方法。class ViewController: UIViewController { let PRODUCT_CELL_IDENTIFIER = "ProductCellIdentifier" @IBOutlet weak var productTableView: UITableView! var productViewModel: ProductViewModel = ProductViewModel() } //UITableView Delegate Methods extension ViewController { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return productViewModel.numberOfRowsInSection() } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: PRODUCT_CELL_IDENTIFIER) as! ProductTableViewCell let product = productViewModel.productsArray[indexPath.row] cell.productName.text = product.name cell.productQuantity.text = "\(product.quantity)" return cell } } -
ProductViewModel: - 这是 ViewModel 类。
class ProductViewModel: NSObject { var productsArray = Array<Product>() override init() { let product1 = Product(name: "Prodcut1", image_url: "", quantity: 2) let product2 = Product(name: "Prodcut2", image_url: "", quantity: 3) productsArray.append(product1) productsArray.append(product2) } func numberOfRowsInSection() -> Int { return productsArray.count } } -
Product - 这是模型类
class Product: NSObject { var name: String var image_url: String var quantity: Int init(name: String, image_url: String, quantity: Int) { self.name = name self.image_url = image_url self.quantity = quantity } } -
ProductTableViewCell - 这是 UITableViewCell 类
class ProductTableViewCell: UITableViewCell { @IBOutlet weak var productQuantity: UILabel! @IBOutlet weak var productName: UILabel! @IBOutlet weak var productImageView: UIImageView! }
【问题讨论】:
-
您正在考虑在 View/ViewController 中获取与 MVVM 概念相矛盾的模型数组,View 不应访问模型,它应该从视图模型中获取所需的一切。
标签: ios swift uitableview mvvm