16

我一直在使用 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 自动完成值,但没有一个产生工作代码,我在网上找不到任何最近的例子,也许是因为这是全新的。

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

4

2 回答 2

32

斯威夫特 2

Swift 2 中的NSCalendarUnit名称已更改。

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

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

斯威夫特 3

根据Swift API 设计指南,许多事情都发生了变化。

更新语法:

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

斯威夫特 4

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

let calendar = Calendar.current
let components = calendar.dateComponents([.hour, .minute, .second, .nanosecond], from: date)
于 2015-06-12T08:29:22.813 回答
1

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

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

于 2015-10-12T10:42:48.900 回答