update: Хорошо, вы просто замените в функции ShoppingListDetailViewController.viewWillAppear(_:)
.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard let shoppingItemController = shoppingItemController else { return }
var chosenItems: [ShoppingItem] = []
for item in shoppingItemController.shoppingItems {
if item.added {
chosenItems.append(item)
}
}
numberOfItemsLabel.text = "You currently have \(chosenItems.count) items(s) in your shopping list"
}
И на ShoppingListCollectionViewController.swift
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as! ShoppingItemCollectionViewCell
/* here you do just changed new declare chosenItem.added, not shoppingItemController.shoppingItems
var chosenItem = shoppingItemController.shoppingItems[indexPath.item]
chosenItem.added.toggle()
*/
// so you just use this to change shoppingItem's status be added
shoppingItemController.shoppingItems[indexPath.item].added.toggle()
cell.hasBeenAddedLabel.text = chosenItem.added ? "Added" : "Not Added"
print(chosenItem.added)
}
И старый ответ не использовался, вы можете удалить его все и измените его на обновленный ответ.
старый ответ:
Я думаю ... возможно, вы просто хотите, чтобы при выборе ячейки значение ShoppingListDetailV C .itemsInCart увеличилось на единицу.
Если я не ошибаюсь, вы можете использовать переменную didSet {}
// In ShoppingListDetailViewController.swift
var itemInCart: Int = 0 {
didSet {
numberOfItemsLabel.text = "You currently have \(itemsInCart) items(s) in your shopping list"
}
}
А в своей коллекцииViewController, возможно, вы объявили переменную для ShoppingListDetailViewController Здесь я предполагаю ее имя shopListDetailVC
// when cell be selected, you add something here.
func onSelectedAddCart() {
shopListDetailVC.itemsInCart += 1
}
Или, может быть, вам не нужно itemsInCart, просто замените переменную shoppingItem на
var shoppingItems: [ShoppingItem] = [] {
didSet {
numberOfItemsLabel.text = "You currently have \(shoppingItems.count) items(s) in your shopping list"
}
}
Тогда при выборе ячейки будет
func onSelectedAddCart(with item: ShoppingItem) {
shopListDetailVC.shoppingItems.append(item)
}
Final , если ваш ShoppingListDetailViewController не был объявлен в collectionViewController, попробуйте передать shopListDetailV C или используйте другой способ (например, используйте протокол или закрытие), чтобы передать события, которые при выборе вашего элемента.