gpt4 book ai didi

ios - 使用 Swift 的带有 MVVM 的 UITableView

转载 作者:IT王子 更新时间:2023-10-29 05:17:20 25 4
gpt4 key购买 nike

我正在使用 UITableView 在 Swift 中研究 MVVM 架构。为此,我创建了示例 TableView 。

任何人都可以建议我是否正确或需要做任何其他改进吗?

以下是该架构的类。

  1. ViewController - 包含 UITableView 及其delegatedatasource 方法。

    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
    }
    }
  2. 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
    }
    }
  3. 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
    }
    }
  4. ProductTableViewCell - 这是 UITableViewCell 类

    class ProductTableViewCell: UITableViewCell {
    @IBOutlet weak var productQuantity: UILabel!
    @IBOutlet weak var productName: UILabel!
    @IBOutlet weak var productImageView: UIImageView!
    }

最佳答案

你做得很好,但你甚至可以通过添加以下函数来改进你的产品模型以获得直接模型数组。当您从 Web Api 响应创建数组时,它非常有用。

class Product : NSObject
{

var imgUrl : String!
var name : String!
var quantity : Int!

init(dictionary: [String:Any])
{
imgUrl = dictionary["img_url"] as? String
name = dictionary["name"] as? String
quantity = dictionary["quantity"] as? Int
}
init(name: String, image_url: String, quantity: Int)
{
self.name = name
self.imgUrl = image_url
self.quantity = quantity
}
public class func modelsFromArray(array:[[String:Any]]) -> [Product]
{
var models:[Product] = []
for item in array
{
models.append(Product.init(dictionary:item))
}
return models
}
}

使用喜欢

let product1 = Product(name: "Prodcut1", image_url: "", quantity: 2) //Normal Case

let productList:[[String:Any]] =
[
["name":"Jaydeep","img_url":"xyz","quantity":1],
["name":"Jaydeep","img_url":"xyz","quantity":2],
["name":"Jaydeep","img_url":"xyz","quantity":3],
["name":"Jaydeep","img_url":"xyz","quantity":4],
["name":"Jaydeep","img_url":"xyz","quantity":5],
["name":"Jaydeep","img_url":"xyz","quantity":6]
]
//Assign Direct Dictionary to Get Array Of Models
/* Very useful when productList is dictionary from server response*/
let productArray:[Product] = Product.modelsFromArray(array: productList)

而且你的细胞等级也提高了

class ProductTableViewCell: UITableViewCell {

@IBOutlet weak var productQuantity: UILabel!
@IBOutlet weak var productName: UILabel!
@IBOutlet weak var productImageView: UIImageView!
func setProductData(product:Product)
{
self.productName.text = product.name
self.productQuantity.text = "\(product.quantity)"

}

}

用法:

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.setProductData(product:product)
return cell
}

关于ios - 使用 Swift 的带有 MVVM 的 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45206153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com