【发布时间】: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