【问题标题】:Changing the displayed data based on a user selected Date in Swift?根据用户在 Swift 中选择的日期更改显示的数据?
【发布时间】:2020-12-09 17:06:14
【问题描述】:

我是 Swift 新手,正在为一个项目构建一个营养跟踪应用程序。我需要将用户的食物保存到他们将它们添加到他们的食物日记部分的那一天,该部分显示添加到每餐中的食物。

比如用户添加了一个苹果,这个会保存到今天,一天过去了,显示的数据就会保存到那个日期。

我目前使用 CoreData 保存了带有日期的食品,这显示在列表中:

    func saveBreakfast() {
        
        
        let newBreakfastItem = BreakfastItem(context: self.moc)
        newBreakfastItem.id = UUID()
        newBreakfastItem.name = self.item.name
        newBreakfastItem.calories = Int32(self.totalCalories)
        newBreakfastItem.carbs = Int32(self.totalCarbs)
        newBreakfastItem.protein = Int32(self.totalProtein)
        newBreakfastItem.fat = Int32(self.totalFats)
        newBreakfastItem.date = self.dateAdded

        
        
        
        do {
        if self.mocB.hasChanges { // saves only if changes are made
        try? self.mocB.save()
            
            }
            
        }
}

ForEach(self.BreakfastItems, id: \.id) { newBreakfastItems in
                        
                       HStack{                            
                        
                            Text(newBreakfastItems.name ?? "Unknown")
                                 .font(.headline)

                             .font(.headline)
                    
                        
            
                            HStack {
                             
                                
                                Text("Cal: \(Int32(newBreakfastItems.calories))")
                                    .fontWeight(.light)
                                    .foregroundColor(Color("Green Font"))

                                Text("F: \(Int32(newBreakfastItems.fat))")
                                    .fontWeight(.ultraLight)

                                Text("P: \(Int32(newBreakfastItems.protein))")
                                    .fontWeight(.ultraLight)

                                Text("C: \(Int32(newBreakfastItems.carbs))")
                                    .fontWeight(.ultraLight)

但是,我不确定如何查看保存到过去几天的食物,因为目前该应用程序只是一直添加到同一个列表中,无论它保存在哪一天。

某种形式的 ForEach Date 语句是否可以根据从日历中选择的日期循环浏览视图?

提前致谢!

【问题讨论】:

    标签: swift date core-data swiftui


    【解决方案1】:

    如果您想获取特定日期的项目,您可以只使用具有特定日期的 FetchRequest 谓词。但是,您可能每天都有许多获取请求。 (不确定您如何在应用中显示它)

    第二种方法,您可以获取所有项目,并根据日期过滤它们并显示它们。这是在 ForEach 中过滤您的项目的示例。

    ForEach(self.BreakfastItems.filter { 
      $0.date == Date()
    }, id: \.id) { newBreakfastItems in
    

    这只会显示日期等于当前Date() 的项目。无论时间如何,您可能只需要检查同一日期。

    您可以根据要显示的当前日期添加更多过滤器。

    【讨论】:

    • 感谢您的回复!第二个选项看起来最好,因为我想使用用户从 DatePicker 中选择的日期来指定日期。但是由于某种原因这不起作用,我认为这可能是因为所选日期和 $0.date 的格式不同?现在我有 @State var selectedDate : Date and ForEach(self.BreakfastItems.filter { $0.date == selectedDate }, id: \.id) { newBreakfastItems in,知道为什么这不起作用吗?
    • @Noonan_12 方法是正确的。但是,日期也将始终节省时间。因此,日期不相等。检查这个问题,如何在没有时间的情况下比较日期,您将获得解决方案。 stackoverflow.com/questions/24577087/…
    • 我就是这么想的,谢谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多