Swift 如何访问 Struct 对象字典中的特定变量

Posted

技术标签:

【中文标题】Swift 如何访问 Struct 对象字典中的特定变量【英文标题】:Swift How to access specific variable in a dictionary of Struct objects 【发布时间】:2022-01-06 15:54:38 【问题描述】:

这里是 Swift 新手,

我有一个 Meal 结构体,还有一个 Meal 结构体对象数组。由于 Firestore 没有内置 group-by 选项,因此我尝试使用 Dictionary(grouping: ) 初始化程序对从 Firestore 获取的 Meal 数组进行分组。我按消费日期对膳食进行分组,这样我就可以计算特定日期的卡路里。

到目前为止,这是我字典的一个 sn-p,我跳过了一些不必要的字段:

["28 November 2021": [HealthyChoices.Meal(id: "...", calories_eaten: 40, meal_products: ["..."], date: "28 November 2021", who_ate: "..."), HealthyChoices.Meal(id: "...", calories_eaten: 50, meal_products: ["..."], date: "28 November 2021", who_ate: "...")]

如您所见,键是膳食分组的日期,值是从 Firestore 获取的整个对象。当然,一个日期可以分配多餐。 现在我想做的是计算给定一天所吃的总卡路里(这本词典中的键)。不幸的是,我完全不知道用什么方法来遍历它以从每顿饭中只获取一个特定字段(“calories_eaten”字段),然后为每个日期计算它(这本字典中的键)。

我试图用地图功能完成一些事情,但不幸的是我似乎仍然无法访问这些字段。我正在尝试这样的事情:

for (key, value) in groupedMeals 
     for key in groupedMeals.keys 
            value.get //no idea how to access that
     

请帮忙,我给饼干。

【问题讨论】:

您的value 变量已经包含与特定key 对应的餐食数组。您只需像使用任何 ol' 数组一样使用它。 嘿亚历山大。我不认为我理解正确。如果我尝试像上面显示的示例循环那样访问它,例如value.calories_eaten,我收到“'[Meal]' 类型的值没有成员 'calories_eaten'”错误。我也不确定我上面提供的嵌套 for 循环是否足以访问我的意思 是的,因为它是 [Meal](又名 Array<Meal>)。这是多餐,没有一个单一的“calories_eaten”属性。您需要访问该数组的成员,例如使用嵌套循环。但是嵌套循环需要循环这一系列餐点,而不是groupMeal.keys(这将是字典的键,即时间戳 谢谢!感谢您的建议,我终于能够访问这些值。 【参考方案1】:

您可以在字典上使用.mapValues

var caloriesPerDay: Dictionary<String, Int> = groupedMeals.mapValues  meals in
    meals.map  meal in
        meal.calories_eaten // Get calories_eaten from each meal
    .reduce(0, +) // Sum of the resulting [Int]

【讨论】:

太好了,谢谢,这很有魅力!我想我需要上一些字典复习课:)

以上是关于Swift 如何访问 Struct 对象字典中的特定变量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SWIFT 在 plist 中访问数组及其对象?

如何使用 Swift 的 Codable 编码成字典?

Swift Codable:具有字典的数组数组

Swift 中的延迟属性初始化

Swift 中的延迟属性初始化

在 Swift 中访问共享容器中的自定义对象