我是 Swift 新手,一直被一个简单的问题困扰......
背景:
我正在尝试构建一个食谱应用程序,该应用程序为一周中的每一天(7 天)提供不同的食谱
一个json包含层次结构中的所有数据:天 -> 有多个食谱 -> 有多个成分,其中成分具有以下格式:
"ingredients": [
{
"item": "cereal",
"amount": 1,
"units": "cup(s)"
},
{
"item": "milk",
"amount": 0.2,
"units": "L"
}
]
期望的结果:
到目前为止我走了多远:
数据是以这种有效格式从 json 中提取的:
struct Day: Hashable, Codable, Identifiable {
//Breakfast
var breakfastData: mealResponse
//Dinner
var dinnerData: mealResponse
struct mealResponse: Hashable, Codable {
struct IngredientResponse: Hashable, Codable {
var item: String
var amount: Double
var units: String
}
}
}
然后我设法获得完整的成分列表,如下所示:
ForEach(userData.days, id: \.self) { day in
ForEach(day.breakfastData.ingredients, id: \.self) {ingredient in
Text(ingredient.item)
}
}
但这不是一个独特的列表(它只是每天都会浏览并列出了本例中早餐食谱的所有成分......) 非常感谢您对此提供一些帮助 - 实际上花了数周时间尝试各种事情......
奖金:
要获取所有成分的数组,您可以使用
reduce
并使用 Set
仅添加独特的成分
let allIngredients = Array(days.reduce(into: Set<String>()) {
$0.formUnion($1.breakfastData.ingredients.map(\.item))
$0.formUnion($1.dinnerData.ingredients.map(\.item))
})