改变数组中的数值

选择自定义单元格后,该项目将被 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 来回切换 truefalse 并返回。

或者,更简单的是,直接更新数组中的项目,不管它是引用类型还是值类型,都可以使用,例如

shoppingListController.shoppingItems[indexPath.item].itemHasBeenAdded.toggle()

毋庸置疑,这个关于局部的 item 变量只有在数组中的项目本身是值类型时才适用(a struct). 如果它是一个 class无论哪种方式,你都会没事的。但你还是要用 toggle 要让这一个方法切换到 Bool 来回变化。

本文来自投稿,不代表实战宝典立场,如若转载,请注明出处:https://www.shizhanbaodian.com/13071.html

(0)
上一篇 2天前
下一篇 2天前

相关推荐

发表评论

登录后才能评论