這篇文章要來分享如何開發iOS app擷取日曆行程的範例。為了要可以獲得日曆事件,我們需要用到的是EventKit。
要讀取calendar,首先我們需要一個EKEventStore物件,有了這個物件,我們就可以對calendar的內容進行查詢。而app要使用EKEventStore前,我們還需要先和使用者請求權限。
import Foundation
import EventKit
class EventKitDataModel {
private let eventStore = EKEventStore()
func authorizeEventKit(completion: @escaping EKEventStoreRequestAccessCompletionHandler) {
eventStore.requestAccess(to: EKEntityType.event) { (accessGranted, error) in
completion(accessGranted, error)
}
}
}
如上,我們在EventKitDataModel中首先做了一個EKEventStore,然後authorizeEventKit這個函式會做請求權限的動作。
有了權限以後,存取calendar事件就很簡單了,以下範例是獲取所有在兩個日期間的calendar事件行程。
func collectData(since: Date, until: Date) {
let timefilter = self.makeTimePredicate(since: since, until: until)
//Load events
var events: [EKEvent]? = nil
events = eventStore.events(matching: timefilter)
if let allevents = events {
for event in allevents {
//Do something to the event
//e.g. Get the title of the event
let eventtitle = event.title!
}
}
}
func makeTimePredicate (since startDate: Date, until endDate: Date) -> NSPredicate {
return eventStore.predicateForEvents(withStart: startDate, end: endDate, calendars: nil)
}
在這個函數中我們用since和until這兩個變數來做一個TimePredicate稱為timefilter,就是我們的查詢條件。這部份是以makeTimePredicate這個函式實作。接著我們就可以用EKEventStore的.events()獲取查詢結果。每一個事件是一個EKEvent物件,此範例在後面的迴圈裡,只是單純的將這個物件的title內容設給一個區域變數,如果需要進行更多操作,可以查詢Swift manual中對於EKEvent的說明。
謝謝你看完這篇文章。如果你喜歡我的文章,請追蹤Facebook粉專、Twitter、IG。