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 「グループは let 定数であり、変更できません」というエラーが表示されます。しかし、私はそれを作ることでそれを解決したと思ったmutating func add(food: Food).

groups 配列の正しいセクションに newFood 項目を追加できるようにするにはどうすればよいですか?

4

2 に答える 2

0

for ループで宣言された「グループ」は、「グループ」配列内の同じインスタンスではありません。これは、変更したい要素の単なるコピーです。構造体グループは「参照型」ではなく「値型」であるためです。

于 2018-02-08T07:43:07.680 に答える
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 に答える