【问题标题】:NSDate dateByAddingUnit compulsory options - nil not compiling [duplicate]NSDate dateByAddingUnit 强制选项 - nil 不编译 [重复]
【发布时间】:2015-08-18 10:08:15
【问题描述】:

所以我刚刚尝试了一个我认为很简单的操作 - 将一天添加到 NSDate:

SO 上也遵循这个答案,它提供了以下解决方案,虽然不完全是我想要的(但具有相同的逻辑)不起作用:

let twoDaysAgo = calendar.dateByAddingUnit(NSCalendarUnit.Day, value: -2, toDate: NSDate(), options: nil)

我收到以下错误消息:

"Could not find an overload for 'NSDate.init' that accepts the supplied arguments

删除NSDate() 参数后形成如下:

let d = NSDate()
let twoDaysAgo = calendar.dateByAddingUnit(NSCalendarUnit.Day, value: -2, toDate: d, options: nil)

我现在得到一个不同的错误:

'Int' is not convertible to 'IntegerListeralConvertible'

在搜索各种渠道后发现错误出现在最后一个参数options:nil- 现在必须传递一个参数。

为什么会这样?

NSHipster 状态:

components(_:fromDateComponents:toDateComponents:options:):返回两个 NSDateComponents 实例之间的差异。该方法将使用未设置的任何组件的基值,因此至少为每个参数提供年份。 options 参数未使用;通过 nil/0。

虽然Apple 没有明确声明参数不能为零

计算选项。有关可能的值,请参阅“日历选项”。如果您指定“换行”选项 (NSWrapCalendarComponents),则指定的组件会递增并在溢出时回绕为零/一,但不会导致更高的单位递增。当 wrap 选项为 false 时,单元中的溢出会进入更高的单元,就像典型的加法一样。

这是 XCode 7 测试版错误吗? Swift 2 中的新功能?

【问题讨论】:

  • 在引用的线程中,NSCalendarOptions 是一个“OptionSetType”。在你的情况下:let twoDaysAgo = calendar.dateByAddingUnit(.Day, value: -2, toDate: NSDate(), options: []).

标签: ios swift swift2 xcode7 xcode7-beta5


【解决方案1】:

dateByAddingUnit:toDate:options 在 Swift 1.2 及更高版本中的完整签名是

func dateByAddingUnit(unit: NSCalendarUnit, value: Int, toDate date: NSDate, options: NSCalendarOptions) -> NSDate?

options 类型显然是非可选类型,因此它不能是 nil

在 Swift 1.2 及更高版本中,您可以使用类型的泛型初始化器传递一个空值,但类型必须是不同的

NSCalendarOptions()

在 Swift 演变过程中发生了很多变化,因此 NSHipster 可能指的是 Swift 的早期版本

【讨论】:

  • 2.0 的很多变化,哪里是查找 2.0 文档的最佳位置?
  • 启动 Xcode 7 并 cmd-单击符号。这将打开相应的头文件/声明文件。
  • 您也可以使用[]。这适用于实现 OptionSetType 的任何类型。
【解决方案2】:

对于任何有兴趣的人,我都可以通过以下方式工作/编译解决方案:

let calendar = NSCalendar.currentCalendar()
let addOneDay = calendar.dateByAddingUnit(NSCalendarUnit.Day, value: 1, toDate: NSDate(), options: NSCalendarOptions.WrapComponents)

或:

let calendar = NSCalendar.currentCalendar()
let addOneDay = calendar.dateByAddingUnit(NSCalendarUnit.Day, value: 1, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 2015-09-05
    • 2020-11-01
    • 2023-04-09
    • 2019-05-03
    • 2014-05-11
    • 2022-07-08
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多