swift - 如何根据 SwiftUI 中的日期将事件分成列表的不同部分?

标签 swift list foreach swiftui

我正在使用提供 2019 年所有美国假期的 JSON 数据。这些数据让我可以访问名称、描述和日期。我成功导入了所有内容,但想根据月份分节列出假期。

在 SwiftUI 中,代码将是:List -> ForEach -> Section -> ForEach -> ListRow,但我不确定如何说日期的月份匹配是否将它们放在同一部分中。我可能会以错误的方式处理它......

allHolidays 代表我拥有的假期数据:

List {
    ForEach(?) { month in
        Section(header: Text("Month goes here...")) {
            ForEach(self.allHolidays, id: \.name) { holiday in
                HolidayRowView(name: holiday.name, date: holiday.date)
            }
        }
    }
}

我列出了所有假期,日期在它们下面。我无法让它们分成不同的部分。

这是来自 Calendarific 的 JSON 数据的片段:

{
    "meta": {
        "code": 200
    },
    "response": {
        "holidays": [
            {
                "name": "Name of holiday goes here",
                "description": "Description of holiday goes here",
                "date": {
                    "iso": "2018-12-31",
                    "datetime": {
                        "year": 2018,
                        "month": 12,
                        "day": 31
                    }
                },
                "type": [
                    "Type of Observance goes here"
                ]
            }
        ]
    }
}

最佳答案

在您的第一个 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)
                }
            }
        }
    }
}

关于swift - 如何根据 SwiftUI 中的日期将事件分成列表的不同部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58142962/

相关文章:

swift - 隐藏的导航栏和更改的应用程序流程 - swift

swift - Swift 4.1 中的 SpriteNode 移动和旋转

python - 更新的词典列表

c++ - 基于范围的循环的 BOOST_FOREACH 和 c++11 之间的区别?

java - 使用 foreach 在单行/表中显示多个列表

ios - ObservableObject 中的 ObservedObject 不刷新 View

swift3 中的 JSONSerialization 错误

具有多个参数的 Python 映射函数到元组列表

java - 如何在java中使用列表中的数组

c# - 不同属性的通用 foreach 循环