概览
Klendario 是对 EventKit
框架的 Swift 封装。通过提供一系列函数、扩展以及半自动管理对 iOS 日历的权限请求,简化了在 iOS 日历中管理事件的任务。
要求
- iOS 9.0+
- Xcode 10.0+
- Swift 4.2+
安装
CocoaPods
将以下行添加到您的 podfile 中
pod 'Klendario'
Carthage
将以下行添加到您的 cartfile
github "ThXou/Klendario" "master"
然后按照官方文档操作,了解如何将框架添加到应用程序中。
配置
在源文件中导入Klendario
import Klendario
接着,在应用程序的Info.plist
文件中将NSCalendarsUsageDescription
使用描述键设置,以避免在访问敏感数据时出现Xcode崩溃。
授权
几乎每次调用都会检查用户授权状态,如果用户未授权访问日历,则返回错误。如果还没有确定授权,会提示用户授权应用程序。您还可以通过调用手动请求授权
Klendario.requestAuthorization { (granted, status, error) in
if let error = error {
print("error: \(error.localizedDescription)")
} else {
print("authorization granted!")
}
}
如果用户拒绝访问或由于例如家长控制等原因访问受到限制,闭包将返回错误。
如果您喜欢,可以使用以下方法检查用户是否授权访问日历
Klendario.isAuthorized()
事件
创建事件
创建事件就像这样一样简单
let event = Klendario.newEvent()
event.title = "Awesome event"
event.startDate = Date()
event.endDate = Date().addingTimeInterval(60*60*2) // 2 hours
event.save()
如果希望在特定的日历中添加事件,可以在newEvent()
函数中将它作为参数传入。如果您还想在保存时执行一些操作,可以使用可选的完成闭包
...
event.save { error in
if let error = error {
print("error: \(error.localizedDescription)")
} else {
print("event successfully created!")
}
}
在保存事件之前,请先阅读最后的注意事项部分。
获取事件
获取单个事件
您可以通过事件标识符获取事件
Klendario.getEvent(with: eventIdentifier) { (event, error) in
guard let event = event else { return }
print("got an event: \(event.title ?? "")")
}
获取一系列事件
或者,您还可以获取指定日历和日期之间的多个事件
Klendario.getEvents(from: Date(),
to: Date() + 60*60*2,
in: calendars) { (events, error) in
guard let events = events else { return }
print("got \(events.count) events")
}
删除事件
您可以使用 delete
函数轻松删除一个 EKEvent
对象
event.delete()
至于创建事件,您可以在删除事件完成后执行操作。您可以省略任何参数
event.delete(span: .futureEvents, commit: false) { error in
if let error = error {
print("error: \(error.localizedDescription)")
} else {
print("event successfully deleted!")
}
}
在删除事件之前,请阅读 最后的要点。
日历
创建日历
创建新日历就像创建新事件一样简单
let calendar = Klendario.newCalendar()
calendar.title = "Awesome calendar"
calendar.save()
对于事件来说,您可以使用 completion
回闭处理可能的错误或完成任务后的操作。此方法很灵活,因此您可以选择传递不同的 eventStore
或 source
,而不使用默认值。
在保存日历之前,请阅读 最后的要点。
获取日历
要获取包括设备中事件的所有 iOS 日历,只需调用
let calendars = Klendario.getCalendars()
删除日历
您可以使用delete
函数轻松删除一个EKCalendar
对象。
calendar.delete()
至于创建事件,您可以在删除事件完成后执行操作。您可以省略任何参数
calendar.delete(commit: true) { error in
if let error = error {
print("error: \(error.localizedDescription)")
} else {
print("calendar successfully deleted!")
}
}
在删除日历之前,请阅读“最后但同样重要的是”部分。
最后但同样重要的是
使用Klendario
保存或删除事件或日历非常简单,您只需在对象上调用save()
或delete()
,就像前面几节中展示的那样。请注意不要在未使用Klendario
API获取的对象上调用save()
或delete()
,因为它们共享相同的EKEventStore
对象,该对象跨越所有API调用。
EventKit
至少在iOS 12之前不支持跨存储保存。