附加和引用的问题

时间:2017-01-02 08:31:54

标签: swift swift3

嗨我有下面两行代码的问题。我试图将items数组中的项目插入到checkout数组并将其库存设置为1.但是,它还将items数据的库存设置为1。 有人可以解释原因吗?

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let item = items[indexPath.item]
    //inventoryController?.showItemDetailForItem(item: item, index: indexPath.item)
    if item.stock != 0 {
        total += item.price //adding each item to cart adds its price to the checkout price
    for x in checkout {
        if item.name == x.name{
            print("before stock is \(item.stock)")
            x.stock += 1
            print("after stock is \(item.stock)")
            return
        } else{
            print("not equal")
        }
    }
        checkout.insert(item, at: 0) // THIS IS WHERE THE ISSUE IS
        checkout[0].stock = 1 //THIS IS WHERE THE ISSUE IS
    } else{
        print("Not enough stockempty")
    }
    print("stock is \(item.stock)")
    collectionView.reloadData()
}

1 个答案:

答案 0 :(得分:1)

item显然是。类是引用类型

当您要将引用类型对象附加到集合类型时,只会指定一个指针,并且原始对象的引用计数器将递增。

因此,更改属性的值会影响项目的所有匹配项。

要防止此行为,请使用值类型(结构)或制作对象的copy