附加到Xcode中的结构Swift中的数组

时间:2018-02-06 21:54:11

标签: arrays swift for-loop append mutating-function

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

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下面的行中出现错误" group是一个常量且无法变异"。但我以为我通过制作mutating func add(food: Food)来解决这个问题。

如何才能将newFood项附加到groups数组中的正确部分?

2 个答案:

答案 0 :(得分: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)
    }
}

答案 1 :(得分:0)

你的for循环中声明的'group'与'groups'数组中的实例不同。它只是您要修改的元素的常量副本。因为struct Group是'Value Type',而不是'Reference Type'。