如何根据SwiftUI中的日期将事件划分为列表的不同部分?
我使用的JSON数据提供2019年的所有美国假期。通过这些数据,我可以访问名称、描述和日期。我成功导入了所有内容,但希望根据月份将假期分为几个部分列出 在SwiftUI中,代码将是:List->ForEach->Section->ForEach->ListRow,但我不知道如何判断日期的月份是否匹配,是否将它们放在同一节中。我可能走错了方向 所有假日表示我拥有的假日数据:如何根据SwiftUI中的日期将事件划分为列表的不同部分?,swift,list,foreach,swiftui,Swift,List,Foreach,Swiftui,我使用的JSON数据提供2019年的所有美国假期。通过这些数据,我可以访问名称、描述和日期。我成功导入了所有内容,但希望根据月份将假期分为几个部分列出 在SwiftUI中,代码将是:List->ForEach->Section->ForEach->ListRow,但我不知道如何判断日期的月份是否匹配,是否将它们放在同一节中。我可能走错了方向 所有假日表示我拥有的假日数据: 列表{ 每个月 节(标题:文本(“此处为月份…”){ ForEach(self.allHolidays,id:\.name)
列表{
每个月
节(标题:文本(“此处为月份…”){
ForEach(self.allHolidays,id:\.name){holiday in
HolidayRowView(名称:holiday.name,日期:holiday.date)
}
}
}
}
我把所有的假期都列了出来,下面有日期。我不能把它们分成不同的部分
下面是Calendarific中的JSON数据片段:
{
“元”:{
“代码”:200
},
“答复”:{
“假日”:[
{
“名称”:“节日名称在此显示”,
“描述”:“这里是假日的描述”,
“日期”:{
“iso”:“2018-12-31”,
“日期时间”:{
“年份”:2018年,
“月”:12,
“天”:31
}
},
“类型”:[
“这里有一种仪式”
]
}
]
}
}
在您的第一个ForEach
中,您需要迭代所有月份Calendar
将为您提供几个月的本地化名称列表,因此您可以将其用作分区标题。在您的内部ForEach
中,您需要迭代给定月份内发生的假期(部分标题),因此您必须筛选您的列表:
private let calendar = Calendar.current
var body: some View {
List {
ForEach(1...12, id: \.self) { month in
Section(header: Text(calendar.monthSymbols[month-1])) {
ForEach(self.allHolidays.filter({
calendar.component(.month, from: $0.date) == month }),
id: \.name) { holiday in
HolidayRowView(name: holiday.name,
date: holiday.date)
}
}
}
}
}
编辑您的问题以包含您的假日数据结构。使用筛选器是解决方案,谢谢!我不得不做一些修改来适应我收到的JSON数据,但效果很好。