如何根据 SwiftUI 中的日期将事件分成列表的不同部分?
Posted
技术标签:
【中文标题】如何根据 SwiftUI 中的日期将事件分成列表的不同部分?【英文标题】:How do I separate events into different sections of a list based on a date in SwiftUI? 【发布时间】:2019-09-28 02:46:48 【问题描述】:我正在使用提供 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 数据的 sn-p:
"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"
]
]
【问题讨论】:
编辑您的问题以包含您的假期数据结构。 【参考方案1】:在您的第一个 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 数据,但效果很好。以上是关于如何根据 SwiftUI 中的日期将事件分成列表的不同部分?的主要内容,如果未能解决你的问题,请参考以下文章