NSTimeInterval到组件

时间:2014-08-11 14:15:47

标签: swift nsdate nsdatecomponents nstimeinterval

我正在尝试将this answer中的Objective-C代码与this answer中的修正转换为Swift:

var theTimeInterval = NSTimeInterval()
var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)

var date1 = NSDate()
var date2 = NSDate(timeInterval: theTimeInterval, sinceDate: date1)

var unitFlags = NSCalendarUnit(UInt.max)
var info = calendar.components(unitFlags, fromDate:date1, toDate:date2, options:0)

然而,在最后一行,Xcode给了我一个莫名其妙的错误:

通话中的额外参数'toDate'

我通过命令单击它来查看NSCalendar的代码,我正在使用的函数签名似乎与其components方法完全匹配。那么我做错了什么?

2 个答案:

答案 0 :(得分:0)

我相信这是Swift 4的正确实现。

  • 在组件中使用所需的任何东西
  • 看起来参数“ options”已删除(请参见the docs
    var theTimeInterval = TimeInterval()
    var calendar = Calendar(identifier: .gregorian)

    var date1 = Date()
    var date2 = Date(timeInterval: theTimeInterval, since: date1)

    //NSCalendarUnit from objc are Calendar.Component in swift
    var components: Set<Calendar.Component> = [.hour, .minute, .second]
    var info = calendar.dateComponents(components,
                                       from: date1, to: date2)

答案 1 :(得分:-1)

这对我有用:

var info = calendar.components(unitFlags, fromDate: date1, toDate: date2, options: NSCalendarOptions(0))

您必须编写NSCalentarOptions枚举。