Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据SwiftUI中的日期将事件划分为列表的不同部分?_Swift_List_Foreach_Swiftui - Fatal编程技术网

如何根据SwiftUI中的日期将事件划分为列表的不同部分?

如何根据SwiftUI中的日期将事件划分为列表的不同部分?,swift,list,foreach,swiftui,Swift,List,Foreach,Swiftui,我使用的JSON数据提供2019年的所有美国假期。通过这些数据,我可以访问名称、描述和日期。我成功导入了所有内容,但希望根据月份将假期分为几个部分列出 在SwiftUI中,代码将是:List->ForEach->Section->ForEach->ListRow,但我不知道如何判断日期的月份是否匹配,是否将它们放在同一节中。我可能走错了方向 所有假日表示我拥有的假日数据: 列表{ 每个月 节(标题:文本(“此处为月份…”){ ForEach(self.allHolidays,id:\.name)

我使用的JSON数据提供2019年的所有美国假期。通过这些数据,我可以访问名称、描述和日期。我成功导入了所有内容,但希望根据月份将假期分为几个部分列出

在SwiftUI中,代码将是:List->ForEach->Section->ForEach->ListRow,但我不知道如何判断日期的月份是否匹配,是否将它们放在同一节中。我可能走错了方向

所有假日表示我拥有的假日数据:

列表{
每个月
节(标题:文本(“此处为月份…”){
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数据,但效果很好。