swift - 在 Swift 中从 EKEvent 获取日历颜色
问题描述
在 Apple 的 EventKit 中,每个日历都可以有一个用户可定义的颜色,也可以在 EKCalendar 实例上以EKCalendar.color
. 如何从单个事件(而不是日历)访问该颜色?是否有从 EKEvent 实例到事件所属的 EKCalendar 的任何反向引用?
例如,我有一个日历列表,并按开始和结束日期获取事件。在由此产生的事件数组中,似乎任何回答“单个事件来自哪个日历”的问题的信息都丢失了。
import EventKit
let eventStore = EKEventStore()
let calendars: [EKCalendar] = getCalendars() // get some calendars here
let d = (start: Date(), end: Date().addingTimeInterval(3600*5)) // [now, now+5h]
let predicate = eventStore.predicateForEvents(withStart: d.start, end: d.end, calendars: calendars)
let events = eventStore.events(matching: predicate) // fetch the events
for event in events { // iterate over all events from calendars within [now, now+5h]
// ?? how to get the color of the calendar of event? or
// ?? how to get the EKCalendar instance event is from?
}
解决方案
看起来EKEvent是 EKCalendarItem 的子类。EKCalendarItem
包含一个属性,calendar
。
话虽如此,这是问题的答案
...
for event in events { // iterate over all events from calendars within [now, now+5h]
// ?? how to get the color of the calendar of
let color = event.calendar.color
// ?? how to get the EKCalendar instance event is from?
let calendar = event.calendar
}
推荐阅读
- java - 如何使片段背景透明?
- java - 使用3个类实现程序错误
- angular - 复选框角度中的Getter和Setter
- python - 计算 Nympy 2D 数组的 mean(),按单独列表中的值分组,字符串对应于 2D 数组中的每一行
- terraform - 使用一个循环和多个字符串创建语句遍历映射列表
- laravel - [路由:bricks.update] [URI:bricks/{brick}] 缺少必需的参数。(查看:/home/Development/ad-et/resources/views/bricks/edit.blade.php)
- javascript - 每当 Firebase 数据库中的值发生变化时更新记录的云函数(值 = 值 + 新值)
- python - 使用python根据条件重复数据库中的上一行
- spring-boot - spring security xml到属性文件
- excel - 按条件自动过滤,如果特定列中没有数据,则应停止执行条件之一