NSDateComponents 语法的差异?

Differences in NSDateComponents syntax?

我一直在 Swift 开发一个时钟应用程序,使用 Xcode 6.3.2 以下代码可以正常构建和运行。

// Get current time
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond | .CalendarUnitNanosecond, fromDate: date)
let hour = components.hour % 12
let minute = components.minute
let second = components.second
let nanosecond = components.nanosecond

然而,当我在 Xcode 7.0 beta 中加载同一个项目并且不做任何更改时,我在 calendar.components 行上收到错误。

Could not find member 'CalendarUnitHour'

我查看了文档,所有 NSCalendarUnit 常量都已弃用(在 iOS 8.0 中说),但组件方法的方法描述仍然说要使用它们。

我尝试过其他 NSCalendarUnit 自动完成值,但 none 生成了工作代码,但我在网上找不到任何最近的示例,也许是因为这是全新的。

有人知道新的正确方法吗?

Swift 2

NSCalendarUnit 名称已在 Swift 2 中更改。

此外,现在我们必须在 OptionSet 中传递这些参数,如下所示:

let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date)

Swift 3

根据 Swift API Design Guidelines.

,许多事情都发生了变化

更新后的语法:

let date = Date()
let calendar = Calendar.current()
let components = calendar.components([.hour, .minute, .second, .nanosecond], from: date)

Swift 4

Calendar.current 现在是 属性,并且 .components 已重命名为 .dateComponents。否则它与 Swift 中的相同 3.

let calendar = Calendar.current
let components = calendar.dateComponents([.hour, .minute, .second, .nanosecond], from: date)

它们现在是一个新协议。 选项设置类型

https://developer.apple.com/library/prerelease/mac/documentation/Swift/Reference/Swift_OptionSetType_Protocol/index.html