1

我正在开发一个需要日历部分的应用程序,从预览图像来看,CalendarKit 看起来非常棒。但是,我是 Swift 的新手,不确定如何使用它。我已经很好地安装了 CocoaPod,但是当我尝试将其添加到我的项目中时,CalendarKit 网站上“用法”部分下列出的代码给了我两个意外错误这些错误是“只能在类成员上指定'覆盖'”和“无法将类型'[Event]'的返回表达式转换为返回类型'[EventDescriptor]'”

这是显示错误的代码的屏幕截图,以及编辑:如果您不想转到任何一个链接,这里是代码的文本

// Return an array of EventDescriptors for particular date
override func eventsForDate(_ date: Date) -> [EventDescriptor] {

let eventStore = EKEventStore()

var models = // Get events (models) from the storage / API

var events = [Event]()

for model in models {
    // Create new EventView
    let event = Event()
    // Specify StartDate and EndDate
    event.startDate = model.startDate
    event.endDate = model.endDate
    // Add info: event title, subtitle, location to the array of Strings
    var info = [model.title, model.location]
    info.append("\(datePeriod.beginning!.format(with: "HH:mm")) - \(datePeriod.end!.format(with: "HH:mm"))")
    // Set "text" value of event by formatting all the information needed for display
    event.text = info.reduce("", {$0 + $1 + "\n"})
    events.append(event)
}
return events
}

由于此代码完全按照用法部分中的说明编写,因此我不知道如何修复错误 - 我不想通过假设代码错误并按照 XCode 建议的方式更改它来破坏任何内容。

此外,我不明白我应该在“var models =”之后放置什么(后面是注释 // Get events (models) from the storage / API)。我是否使用 EKEventStore() 或类似的东西?谁能将我链接到示例代码或解释这里到底应该做什么?

最后,是否有任何文档说明我如何将此函数返回的事件链接到日视图或月视图/实现这些视图?我想要在应用程序中切换的日视图和月视图。

非常感谢您抽出宝贵的时间,如果有任何我遗漏的文档或可以解释这些基本问题的示例代码,我很抱歉遗漏了它 - 请链接它,我会检查出来!

4

1 回答 1

0

请查看CalendarApp,这是一个模板存储库,可作为 CalendarKit 实验的起点。这是一个使用CalendarKitEventKit构建的 iOS 示例日历应用程序。它显示存储在EKEventStore中的事件,类似于默认日历应用程序。

这是相关的代码,但您的实现可能略有不同:

    // This is the `DayViewDataSource` method that the client app has to implement in order to display events with CalendarKit
    override func eventsForDate(_ date: Date) -> [EventDescriptor] {
        // The `date` always has it's Time components set to 00:00:00 of the day requested
        let startDate = date
        var oneDayComponents = DateComponents()
        oneDayComponents.day = 1
        // By adding one full `day` to the `startDate`, we're getting to the 00:00:00 of the *next* day
        let endDate = calendar.date(byAdding: oneDayComponents, to: startDate)!
        
        let predicate = eventStore.predicateForEvents(withStart: startDate, // Start of the current day
                                                      end: endDate, // Start of the next day
                                                      calendars: nil) // Search in all calendars
        
        let eventKitEvents = eventStore.events(matching: predicate) // All events happening on a given day
        
        // The `eventKitEvents` has a type of `[EKEvent]`, we need to convert them to CalendarKit Events
        let calendarKitEvents = eventKitEvents.map { ekEvent -> Event in
            let ckEvent = Event() // Creating a new CalendarKit.Event
            ckEvent.startDate = ekEvent.startDate // Copying all of the properties of the `EKEvent` to the newly created CalendarKit.Event
            ckEvent.endDate = ekEvent.endDate
            ckEvent.isAllDay = ekEvent.isAllDay
            ckEvent.text = ekEvent.title
            if let eventColor = ekEvent.calendar.cgColor {
                ckEvent.color = UIColor(cgColor: eventColor)
            }
            return ckEvent
        }

        return calendarKitEvents
    }

如果仍有不清楚的地方,请随时观看我的 CalendarKit 入门完整教程,视频链接

于 2021-05-09T23:30:55.913 回答