Добавить к массиву в структуре 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 является "типом значения", а не "ссылочным типом".

Другие вопросы по тегам