所以我只是尝试了我认为简单的操作 - 在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
中 - 现在必须传递参数。
为什么会这样?
components(_:fromDateComponents:toDateComponents:options :):返回两个NSDateComponents实例之间的差异。该方法将使用未设置的任何组件的基值,因此至少为每个参数提供年份。 options参数未使用;传递nil / 0。
虽然Apple没有明确说明参数不能是nil
计算选项。有关可能的值,请参阅“日历选项”。如果指定“wrap”选项(NSWrapCalendarComponents),则指定的组件会递增并在溢出时回绕到零/ 1,但不会导致更高的单位递增。当wrap选项为false时,单位中的溢出会进入更高的单位,如典型的添加。
这是一个XCode 7测试版错误吗? Swift 2中的新功能?
答案 0 :(得分:6)
Swift 1.2及更高版本中dateByAddingUnit:toDate:options
的完整签名是
func dateByAddingUnit(unit: NSCalendarUnit, value: Int, toDate date: NSDate, options: NSCalendarOptions) -> NSDate?
options
类型显然是非可选类型,因此不能nil
。
在Swift 1.2及更高版本中,您可以使用类型的通用初始值设定项传递空值,但类型必须是不同的
NSCalendarOptions()
在Swift进化过程中有很多变化,所以NSHipster可能会提到Swift的早期版本
答案 1 :(得分: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))