Я работаю над архитектурой MVVM в Swift с помощью UITableView
. Для этого я создал образец таблицы.
Может ли кто-нибудь предложить мне правильное решение или какие-либо другие улучшения нужно сделать?
Ниже перечислены классы для этой архитектуры.
-
ViewController - содержит
UITableView
и его методыdelegate
иdatasource
.class ViewController: UIViewController { let PRODUCT_CELL_IDENTIFIER = "ProductCellIdentifier" @IBOutlet weak var productTableView: UITableView! var productViewModel: ProductViewModel = ProductViewModel() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } //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 } }
-
Продукт - это модельный класс
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! }