0

我想将一个项目插入到结构中的数组中。我有一堂食物

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 我在“组是一个让常量并且不能被变异”的评论下直接收到一个错误。但我想我通过制作解决了这个问题mutating func add(food: Food)

我该怎么做才能将 newFood 项目附加到组数组中的正确部分?

4

2 回答 2

0

您在 for 循环中使用本地副本。取而代之的是,您可以索引。

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)
    }
}
于 2018-02-07T14:43:54.653 回答
0

在 for 循环中声明的“组”与“组”数组中的实例不同。它只是您要修改的元素的恒定副本。因为 struct Group 是“值类型”,而不是“引用类型”。

于 2018-02-08T07:43:07.680 回答