如何从 NSDate(timeIntervalSince1970) 转换为 NSDate()?

How to convert from NSDate(timeIntervalSince1970 to NSDate()?

这是我的代码。但是报错说,不能用参数列表类型调用 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)

在Swift3中,NSCalendar.currentreturns一个Calendar,也就是 Swift Foundation NSCalendar 类型的值包装器类型。

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

将现有的 Foundation API 导入 Swift 时,类型会自动桥接,这就是 NSCalendar.current 的原因 returns 一个 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, 或 "Bridged Types" 部分 Working with Cocoa Frameworks 在 "Using Swift with Cocoa and Objective-C" 参考。