【问题标题】:defaultCalendarForNewEvents is defined as optional however can't use optional binding to check if it's nildefaultCalendarForNewEvents 被定义为可选但不能使用可选绑定来检查它是否为 nil
【发布时间】:2018-01-09 19:33:36
【问题描述】:

我正在我的应用程序中添加新功能,即在手机上设置的默认日历中添加事件的能力。我获得了许可,并准备添加活动。我检查是否有实际的默认日历,但我收到错误:

条件绑定的初始化器必须是 Optional 类型,而不是 '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()
}

【问题讨论】:

  • 为错误消息和类名添加了额外的格式。

标签: ios swift swift4 eventkit ekeventstore


【解决方案1】:

我在 swift.org 的 Swift 论坛上提出了这个问题并得到了回复。因此,根据响应,“defaultCalendarForNewEvents”在 Swift 3 中被意外标记为非可选,而在 Swift 4 中已修复。这就是为什么存在差异:文档显示 Swift 4 中的声明但可选绑定失败,因为我在 Swift 3. 希望这对遇到同样问题的人有所帮助。

我还被告知此问题没有发布说明,因为它是次要更新。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这没有意义,编译器不是看属性的声明来确定它的类型吗?如果是这样,它不应该抱怨可选绑定。 @creeperspeak
    • 我同意!我想我只是认为幕后一定发生了一些你不知道的事情。
    猜你喜欢
    • 2014-11-25
    • 2019-03-07
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2012-03-09
    • 1970-01-01
    相关资源
    最近更新 更多