Как правильно получить набор 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) }
}
Другие вопросы по тегам