如何解决根据用户在Swift中选择的日期更改显示的数据?
我是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语句是否可以根据从日历中选择的日期来循环浏览视图?
谢谢!
解决方法
如果您想在特殊的日子提取商品,则可以对带有特定日期的FetchRequest使用谓词。但是,那么您每天可能会有许多提取请求。 (不确定如何在应用中显示它)
第二种方法,您可以只提取所有项目,然后根据日期过滤并显示它们。这是一个示例,用于过滤ForEach中的项目。
ForEach(self.BreakfastItems.filter {
$0.date == Date()
},id: \.id) { newBreakfastItems in
这只会显示日期等于当前Date()
的项目。无论何时,您可能只需要检查同一日期即可。
您可以根据要显示的当前日期添加更多过滤器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。