【发布时间】:2020-09-04 11:42:14
【问题描述】:
我有一个 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)
}
}
无论variationId是否不同,上述方法都会不断更新数量。
【问题讨论】:
-
您是否尝试过在扩展中创建 func?我认为 equatable 协议在类声明中,它仅适用于类的同一实例。
-
我确实做到了。谢谢。我发现一个博客添加 Equatable 作为扩展,但结果仍然相同。
-
我会打印或放置断点并调试您正在添加的产品,因为您的代码很好,而且您的错误似乎在其他地方。
-
你是对的。谢谢。我在数组中打印产品的variationId,并且没有返回所有产品,因此它无法识别产品存在。