更改数组中的值
Changing a value in an array
选择自定义单元格后,项目 Bool
值应从 true 更改为 false,反之亦然。通过使用 UICollectionViewDelegate
协议中的 didSelectItemAt
方法,您可以知道何时选择了一个单元格。
这是导师要求我们做的。
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded = true
}
这就是我目前的情况。
您可以编写代码,在选择时将布尔值更改为相反的值,如下所示:
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded = !item.itemHasBeenAdded
}
编辑:正如art-of-dreams所说,这段代码会产生同样的效果:
item.itemHasBeenAdded.toggle()
小心这个模式:
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded = true
如果您的数组中的项目是引用类型(即 class
),这将起作用,因为 item
将引用数组中的实例。但如果它是一个值类型(即 struct
),这个局部 item
变量最终将成为该对象的副本,你最终会在这个副本中更改 itemHasBeenAdded
,不更新数组中的项目。
如果它是 struct
,理论上您可以将该项目复制回去,例如
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded.toggle()
shoppingListController.shoppingItems[indexPath.item] = item
请注意,您说您想要“从 true 变为 false,反之亦然”。在这种情况下,我使用 toggle
在 true
和 false
之间来回切换。
或者,更简单,直接更新数组中的项,无论它是引用类型还是值类型都有效,例如
shoppingListController.shoppingItems[indexPath.item].itemHasBeenAdded.toggle()
不用说,关于局部 item
变量的警告仅适用于数组中的项目本身是值类型(struct
)的情况。如果它是 class
,那么无论哪种方式都可以。但是您仍然希望使用 toggle
来让这个方法来回切换 Bool
。
选择自定义单元格后,项目 Bool
值应从 true 更改为 false,反之亦然。通过使用 UICollectionViewDelegate
协议中的 didSelectItemAt
方法,您可以知道何时选择了一个单元格。
这是导师要求我们做的。
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded = true
}
这就是我目前的情况。
您可以编写代码,在选择时将布尔值更改为相反的值,如下所示:
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded = !item.itemHasBeenAdded
}
编辑:正如art-of-dreams所说,这段代码会产生同样的效果:
item.itemHasBeenAdded.toggle()
小心这个模式:
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded = true
如果您的数组中的项目是引用类型(即 class
),这将起作用,因为 item
将引用数组中的实例。但如果它是一个值类型(即 struct
),这个局部 item
变量最终将成为该对象的副本,你最终会在这个副本中更改 itemHasBeenAdded
,不更新数组中的项目。
如果它是 struct
,理论上您可以将该项目复制回去,例如
var item = shoppingListController.shoppingItems[indexPath.item]
item.itemHasBeenAdded.toggle()
shoppingListController.shoppingItems[indexPath.item] = item
请注意,您说您想要“从 true 变为 false,反之亦然”。在这种情况下,我使用 toggle
在 true
和 false
之间来回切换。
或者,更简单,直接更新数组中的项,无论它是引用类型还是值类型都有效,例如
shoppingListController.shoppingItems[indexPath.item].itemHasBeenAdded.toggle()
不用说,关于局部 item
变量的警告仅适用于数组中的项目本身是值类型(struct
)的情况。如果它是 class
,那么无论哪种方式都可以。但是您仍然希望使用 toggle
来让这个方法来回切换 Bool
。