Добавить к массиву в структуре Swift в Xcode
Я хочу вставить элемент в массив в структуре. У меня есть класс еды
class Food {
var name: String
var category: String
}
Это было инициализировано. Я создал структуру для хранения различных продуктов питания в группы и поместил эту структуру в массив.
struct Group {
var title: String
var foods: [Food]
mutating func add(food: Food) {
foods.append(food)
}
var groups = [Group]()
обе переменные инициализируются, однако, похоже, что мутирующая функция не работает. Когда я пытаюсь добавить новый продукт, например, так:
let newFood = Food(name: "Banana", category: "Fruit")
let foodType = newFood.category
for group in groups {
if foodType == group.title {
// this is what isn't working
group.add(food: newFood)
} else {
let tempGroup = Group(title: foodType, foods: [newFood])
groups.append(tempGroup)
}
Я получаю сообщение об ошибке прямо под комментарием //this is what isn't working
говоря "группа является константой let и не может быть изменена". Но я думал, что решил это, сделав mutating func add(food: Food)
,
Что я могу сделать, чтобы иметь возможность добавлять элемент newFood в правильный раздел в массиве groups?
2 ответа
Вы используете локальное копирование для цикла. Вместо этого вы можете индексы.
struct Group {
var title: String
var foods: [Food]
mutating func add(food: Food) {
foods.append(food)
}
}
var groups = [Group]()
for i in 0..<groups.count {
if foodType == groups[i].title {
groups[i].add(food: newFood)
}
}
'Группа', объявленная в вашем цикле for, не является тем же экземпляром в вашем массиве 'groups'. Это просто постоянная копия элемента, который вы хотите изменить. Поскольку struct Group является "типом значения", а не "ссылочным типом".