【问题标题】:Append to array within a struct Swift in Xcode在 Xcode 中的 Swift 结构中追加到数组
【发布时间】:2018-07-17 01:58:18
【问题描述】:

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

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 项附加到组数组中的正确部分?

【问题讨论】:

  • group 是本地副本。您可以通过说for var group in groups 使其可变,但这仍然无济于事。您的突变只会影响本地可变副本。您需要按索引进行迭代,因此您可以执行 groups[i].add(food: newFood)
  • 我实际上建议您使用[String: [Food]] 而不是[Group]。您会发现查找起来更容易
  • 字典 ` [String: [Food]] ` 可以用来填充 tableView 吗?

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


【解决方案1】:

您在 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)
    }
}

【讨论】:

  • 抱歉,打错了。即使进行了更正,我仍然会收到错误。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多