嗨我有下面两行代码的问题。我试图将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()
}
答案 0 :(得分:1)
item
显然是类。类是引用类型。
当您要将引用类型对象附加到集合类型时,只会指定一个指针,并且原始对象的引用计数器将递增。
因此,更改属性的值会影响项目的所有匹配项。
要防止此行为,请使用值类型(结构)或制作对象的copy