Будьте осторожны с этим шаблоном:
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
Обратите внимание, вы сказали, что хотите «изменить с истинного на ложное или наоборот». Versa». В этом случае я использую toggle
для переключения назад и вперед с true
на false
и обратно.
Или, проще, просто обновите элемент в массиве напрямую, который будет работать независимо является ли это ссылочным типом или типом значения, например
shoppingListController.shoppingItems[indexPath.item].itemHasBeenAdded.toggle()
Нет необходимости говорить, что это предостережение относительно локальной переменной item
применимо, только если элементы в вашем массиве сами являются типами значений ( struct
). Если это class
, вы будете в порядке в любом случае. Но вы все равно захотите использовать toggle
, чтобы этот метод переключал Bool
вперед и назад.