Как разделить события на разные разделы списка на основе даты в SwiftUI? - PullRequest
0 голосов
/ 28 сентября 2019

Я использую данные JSON, которые обеспечивают все выходные в США в 2019 году. Эти данные дают мне доступ к имени, описанию и дате.Я успешно импортировал все, но хочу перечислить праздники в разделах, основанных на месяце.

В SwiftUI, код будет выглядеть так: Список -> ForEach -> Раздел -> 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)
            }
        }
    }
}

У меня есть все списки выходных сдаты под ними.Я не могу заставить их разделить на отдельные секции.

Вот фрагмент данных JSON из Calendarific:

{
    "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 Ответ

1 голос
/ 28 сентября 2019

В вашем первом 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)
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...