0

我有一个产品类的项目。我正在更改 Product 类中的变量,但下面的 addToCart 方法将该项目视为没有进行任何更改。我正在根据 id 和variationId 比较产品。我究竟做错了什么?

import UIKit

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
    }
}

用户可以为产品选择不同的颜色,从而更改variationId。

addItemToCart() 方法检查 cartItems 数组是否包含该产品。如果产品存在,则数量增加 1,否则将产品添加到数组中。

var cartItems = [Product]()

func addItemToCart(product: Product) {
    if cartItems.contains(product) {
        let quantity = product.quantity
        product.quantity = quantity + 1
    } else {
        cartItems.append(product)
    }
}

无论variationId是否不同,上述方法都会不断更新数量。

4

2 回答 2

1

您没有更新正确的对象。你的addItemToCart(product:)函数应该是这样的:

func addItemToCart(product: Product) {
    if let cartItemIndex = cartItems.firstIndex(of: product) {
        cartItems[cartItemIndex].quantity += product.quantity
    } else {
        cartItems.append(product)
    }
}
于 2020-09-04T12:54:37.143 回答
0

您可以按如下方式执行此操作,也可以删除 equatable 属性。

var cartItems = [Product]()

func addItemToCart(product: Product) {
    if let cardItemIndex = cardItems.firstIndex(where: { $0.id == product.id && $0.variationId == product.variationId}) {
        cartItems[cardItemIndex].quantity += 1
    } else {
        cardItems.append(product)
    }
}
于 2020-09-04T12:09:18.747 回答