所以我刚刚尝试了我认为是一个简单的操作 - 将一天添加到 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 参数未使用;通过零/ 0。
虽然Apple没有明确说明参数不能为零
计算选项。有关可能的值,请参阅“日历选项”。如果您指定“换行”选项 (NSWrapCalendarComponents),则指定的组件会递增并在溢出时回绕为零/一,但不会导致更高的单位递增。当 wrap 选项为 false 时,单元中的溢出会进入更高的单元,就像典型的加法一样。
这是 XCode 7 测试版错误吗?Swift 2 中的新功能?