defaultCalendarForNewEvents 被定义为可选的,但是不能使用可选绑定来检查它是否为 nil

defaultCalendarForNewEvents is defined as optional however can't use optional binding to check if it's nil

我正在我的应用程序中添加新功能,即能够在 phone 上设置的默认日历中添加事件。我获得许可并准备添加事件。我查看是否有实际的默认日历,但出现错误:

Initializer for conditional binding must have Optional type, not 'EKCalendar'

现在,defaultCalendarForNewEvents 是一个 Optional(见下面的定义),使用可选绑定来检查它是否为 nil 应该是完全没问题的。我错过了什么?

defaultCalendarForNewEvents EKEventStore.h 中的定义:

open var defaultCalendarForNewEvents: EKCalendar? { get }

我在 iOS11.2 上使用 Swift 3。(已编辑以更正我正在使用的 Swift 版本。)

代码如下:

if let defaultCalendar = eventStore.defaultCalendarForNewEvents { <-- error line
    newEvent.title = "Some Event Name"
    newEvent.startDate = Date()
    newEvent.endDate = Date()
}

错误告诉您 defaultCalendarForNewEvents 实际上不是可选的。也许有一些你看不到的零合并或其他事情正在发生。无论如何,如果编译器告诉您它不是可选的,则无需为可选绑定而战。

我在 swift.org 的 Swift 论坛上提出了这个问题,并得到了回复。因此,根据响应,'defaultCalendarForNewEvents' 在 Swift 3 中被意外标记为非可选,并且在 Swift 4 中已修复。这就是存在差异的原因:documentation showing declaration in Swift 4 但可选绑定失败,因为我在 Swift 3。希望这对遇到同样问题的人有所帮助。

我还被告知这个问题没有发布说明,因为它是一个小更新。