#swift
#swift
Вопрос:
У меня есть массив с событиями, которые отсортированы по дате. Я хочу отдельный раздел для каждого дня [понедельник], [вторник], …. Как мне создать 2-мерный массив, который выглядит следующим образом? И как мне получить каждое событие в соответствующем разделе?
[ [monday] [tuesday] [wednesday] . .and so on ]
func getEvents(){
let calendars = eventStore.calendars(for: .event)
for calendar in calendars {
// if calendar.title == "Arbeit" {
let anfang = NSDate()
let ende = Calendar.current.date(byAdding: .day, value: 6, to: anfang as Date)!
let predicate = eventStore.predicateForEvents(withStart: anfang as Date, end: ende as Date, calendars: [calendar])
let events = eventStore.events(matching: predicate)
var found:Bool = false
for event in events {
if (allEvents.count == 0)
{
allEvents.append(event)
}
if (allEvents.count > 0)
{
found = false
if ( event.title == allEvents[allEvents.count-1].title amp;amp; event.startDate == allEvents[allEvents.count-1].startDate)
{
found = true
}
}
if(!found)
{
allEvents.append(event)
}
}
Ответ №1:
Следующее решение сначала группирует дату начала на основе событий по дням недели в словаре, а затем преобразует словарь в 2D-массив, сначала отсортированный по сегодняшнему дню
Сначала настройте календарь и DateFormatter для использования
let locale = Locale(identifier: "en_US_POSIX")
var calendar = Calendar.current
calendar.locale = locale
let formatter = DateFormatter()
formatter.locale = locale
formatter.dateFormat = "EEEE"
Группируйте события
let byWeekday = Dictionary(grouping: events, by: { formatter.string(from: $0.startDate) })
Получите дни недели в правильном порядке
let weekdays = calendar.weekdaySymbols
let todayIndex = weekdays.firstIndex(of: formatter.string(from: Date())) ?? calendar.weekdaySymbols.startIndex
let sortedWeekdays = weekdays[todayIndex..<weekdays.endIndex] weekdays[weekdays.startIndex..<todayIndex]
а затем создайте и заполните массив
var eventsByDay = [[EKEvent]]()
for day in sortedWeekdays {
eventsByDay.append(byWeekday[day] ?? [])
}
Комментарии:
1. Как бы я использовал text = [YourArray componentsJoinedByString:@» n»]; с моим 2-мерным массивом