选择自定义单元格后,该项目将被 Bool
值应从真变为假,反之亦然。您可以通过使用下面的函数来知道何时选择了一个单元格。didSelectItemAt
中的方法 UICollectionViewDelegate
协议。
这是教官要求我们做的。
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded = true
}
这是我目前所做的。
解决方案:
小心使用这种模式。
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded = true
如果你的数组中的项目是一个引用类型(例如,a class
),因为 item
将引用数组中的实例。但如果它是一个值类型(即一个 struct
),这个局部的 item
变量将最终成为对象的副本,而你最终会更改 itemHasBeenAdded
在这个副本中,而不是更新你的数组中的项目。
如果它是一个 struct
理论上,你可以把这个项目复制回来,如
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded.toggle()
shoppingListController.shoppingItems[indexPath.item] = item
注意,你说你想 “从真到假或反过来”。在这种情况下,我使用 toggle
来回切换 true
到 false
并返回。
或者,更简单的是,直接更新数组中的项目,不管它是引用类型还是值类型,都可以使用,例如
shoppingListController.shoppingItems[indexPath.item].itemHasBeenAdded.toggle()
毋庸置疑,这个关于局部的 item
变量只有在数组中的项目本身是值类型时才适用(a struct
). 如果它是一个 class
无论哪种方式,你都会没事的。但你还是要用 toggle
要让这一个方法切换到 Bool
来回变化。
本文来自投稿,不代表实战宝典立场,如若转载,请注明出处:https://www.shizhanbaodian.com/13071.html