0

クラス 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 が異なるかどうかに関係なく、数量を更新し続けます。

4

2 に答える 2