首页 > 解决方案 > Swift 类不保留其属性之一中的值

问题描述

我有多个产品类的项目。我正在根据 id 和variationId 比较产品。

class Product: Equatable {
    let id: Int
    let name: String
    var variationId: Int
    var quantity: Int
    
    init(id: Int, name: String, variationId: Int, quantity: Int) {
        self.id = id
        self.name = name
        self.variationId = variationId
        self.quantity = quantity
    }
    
    static func == (lhs: Product, rhs: Product) -> Bool {
        return
            lhs.id == rhs.id && lhs.variationId == rhs.variationId
    }
}

在产品视图控制器中,我有一个结构 VariationOption 和一个变量产品,如下所示。

struct VariationOption {
    var id: Int
    var name: String
    var option: String
}

var product: Product!

当用户更改颜色选项时,它会更改该产品的 variantId 属性

self.product.variationId = variationOption.id

用户可以为产品选择不同的颜色,从而更改variationId。将产品添加到购物车时,addItemToCart 函数会检查该产品是否存在于购物车中。如果产品存在,则该产品 ID 的数量会更改,否则产品将添加到购物车。

我要做的是比较变体 id,如果不同,也将产品添加到购物车。

我遇到的问题是这个。用户选择一个选项,变体 ID 更改,产品被添加到购物车,但不是添加新产品,而是将变体 ID 更改为已经在购物车产品数组中的产品。

如何确保购物车中 products 数组中的产品不会更改变体 id 属性?

func addItemToCart(product: Product) {
    if let cartItemIndex = cartItems.firstIndex(of: product) {
        cartItems[cartItemIndex].quantity += product.quantity
    } else {
        cartItems.append(product)
    }
}

标签: swiftclassequatable

解决方案


推荐阅读