Как правильно получить набор EKCalendars
Сейчас я разрабатываю приложение для iOS, которое показывает список iCloud EKCalendars. Мои быстрые коды могут получить набор iCloud EKCalendars, но порядок всегда другой. Может ли кто-нибудь дать мне совет, чтобы навести порядок?
let eventStore = EKEventStore()
let sources = eventStore.sources
for source in sources {
if (source.title == "iCloud") {
let calendars = source.calendars(for: .event)
for calendar in calendars {
print("calendar title = " + calendar.title)
}
}
}
Пример результата кодов:
calendar title = title1
calendar title = title6
calendar title = title5
calendar title = title3
calendar title = title4
calendar title = title2
2 ответа
Так let calendars = source.calendars(for: .event)
имеет тип Set<EKCalendar>
по определению Set
это тип данных, который не упорядочен, поэтому всякий раз, когда вы перебираете набор, он всегда может быть в другом порядке, единственное, что Set
обеспечивает то, что существует только один экземпляр объекта.
Если вы хотите заказать календари, вам придется заказать их самостоятельно, один из них - title
или же calendarIdentifier
,
Просто sort
Set
, результат - упорядоченный массив:
let eventStore = EKEventStore()
let sources = eventStore.sources.filter{ $0.title == "iCloud" }
for source in sources {
let calendars = source.calendars(for: .event).sorted{ $0.title < $1.title }
calendars.forEach { print("calendar title = ", $0.title) }
}