1、匯入 EventKit
2、建立EKEventStore物件
該物件建立和銷燬的時候和耗時間,而且在和Event相關的屬性釋放前釋放的時候,可能出現不可預知的BUG,所以在使用的時候,推薦使用單例
3、監測授權,請求授權
4、讀取事件資料
- 建立謂詞 (謂詞的時間間隔,最大為4年)
- 通過謂詞匹配時間(同步的)
5、增刪處理
6、簡單的程式碼
import Foundation
import EventKit
class CalendarEventManager {
static let manager = CalendarEventManager()
static var isAuthorized: Bool {
return EKEventStore.authorizationStatus(for: .event) == .authorized
}
private let store = EKEventStore()
func saveEvent(_ event: EKEvent) -> Bool {
var rst = true
do {
try store.save(event, span: .thisEvent)
} catch {
rst = false
}
return rst
}
func removeEvent(_ event: EKEvent) -> Bool {
var rst = true
do {
try store.remove(event, span: .thisEvent)
} catch {
rst = false
}
return rst
}
func requestAnthorized(completion: @escaping (Bool, Error?) -> Void) {
store.requestAccess(to: .event, completion: completion)
}
func loadEvents(withStart: Date, end: Date, completion: @escaping ([EKEvent]) -> Void) {
let predicate = store.predicateForEvents(withStart: withStart, end: end, calendars: [store.defaultCalendarForNewEvents])
DispatchQueue.global().async {
let events = self.store.events(matching: predicate)
DispatchQueue.main.async {
completion(events)
}
}
}
}
複製程式碼
7、內建UI展示,編輯ViewController
- 匯入 EKEventUIKit
- 建立,展示就行了
8、一些思考
- 模擬器列印的EventStore中Calendars 發現有三個Calendar,預設使用的是Calendar。
- 暫時沒有想到如何區分是本應用建立的時間
- EKEvent這個類,可以繼承,但是沒法繼承構造方法,所有傳入不了EventStore。繼承是沒有效果的。