Klendario 1.0.1

Klendario 1.0.1

Luis Cardenas 维护。



Klendario 1.0.1

概览

Pod Version Pod Platform Carthage compatible Pod License

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 回闭处理可能的错误或完成任务后的操作。此方法很灵活,因此您可以选择传递不同的 eventStoresource,而不使用默认值。

在保存日历之前,请阅读 最后的要点

获取日历

要获取包括设备中事件的所有 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之前不支持跨存储保存。