无法检测到同一类的两个对象之间的差异



我有一个Product类的项。我正在更改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)
}
}

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

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

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

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

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

最新更新