如何解决平等的无法检测到同一类别的两个对象之间的差异
我有一个产品类别的商品。我正在更改Product类中的变量,但是下面的addToCart方法将项目视为没有进行任何更改。我正在根据id和variantId比较产品。我在做什么错了?
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
}
}
用户可以为产品选择其他颜色,并以此来更改variantId。
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是否不同,上述方法都会不断更新数量。
解决方法
您没有更新正确的对象。您的addItemToCart(product:)
函数应如下所示:
func addItemToCart(product: Product) {
if let cartItemIndex = cartItems.firstIndex(of: product) {
cartItems[cartItemIndex].quantity += product.quantity
} else {
cartItems.append(product)
}
}
,
您可以按照以下步骤进行操作,也可以删除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)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。