如何转换NSDate(timeIntervalSince1970到NSDate()?

时间:2016-12-17 12:55:19

标签: swift swift3 nsdate nscalendar

这是我的代码。但是一个错误说,不能使用类型为...的参数列表调用dateComponent。

 let fromDate = NSDate(timeIntervalSince1970: TimeInterval(tweetsArray[indexPath.row].timestamp)!)

        let toDate = NSDate()

        let components : NSCalendar.Unit = [.second, .minute, .hour, .day, .weekOfMonth]

        let differenceOfDate = NSCalendar.current.dateComponents(components, from: fromDate, to: toDate)

1 个答案:

答案 0 :(得分:1)

在Swift 3中,NSCalendar.current会返回Calendar,即{。}} 基金会NSCalendar类型的Swift值包装器类型。

dateComponents()需要Set<Calendar.Component>和两个Date个参数。 DateNSDate的Swift值包装类型。

将现有的Foundation API导入Swift时,类型会自动桥接,这就是为什么NSCalendar.current 返回Calender而不是NSCalendar

值类型在Swift 3中是首选,因为它们 提供适当的值语义,并使用letvar代替 不可变和可变变体。

全部放在一起:

let fromDate = Date(timeIntervalSince1970: ...)
let toDate = Date()
let components = Set<Calendar.Component>([.second, .minute, .hour, .day, .weekOfMonth])
let differenceOfDate = Calendar.current.dateComponents(components, from: fromDate, to: toDate)

有关Swift 3值包装器类型和的更多信息 他们对应的基础类型,请参阅 SE-0069 Mutability and Foundation Value Types, 或者#34;桥接类型&#34;在 Working with Cocoa Frameworks在&#34;使用Swift with Cocoa和Objective-C&#34; 参考