Swift NSDateComponents语法的差异?

Swift NSDateComponents语法的差异?,swift,swift2,nscalendar,nsdatecomponents,Swift,Swift2,Nscalendar,Nsdatecomponents,我一直在使用Swift和Xcode 6.3.2开发一个时钟应用程序,下面的代码构建并运行得很好 // Get current time let date = NSDate() let calendar = NSCalendar.currentCalendar() let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond | .CalendarUnitNano

我一直在使用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中说),但components方法的方法说明仍然说要使用它们

我曾经使用过其他NSCalendarUnit自动完成值,但没有一个生成工作代码,而且我在网上找不到任何最近的示例,可能是因为这是全新的


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

Swift 2

Swift 2中的
NSCalendarUnit
名称已更改

另外,现在我们必须以OptionSet形式传递这些参数,如下所示:

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

许多事情都发生了变化

更新的语法:

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)

Swift 2

Swift 2中的
NSCalendarUnit
名称已更改

另外,现在我们必须以OptionSet形式传递这些参数,如下所示:

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

许多事情都发生了变化

更新的语法:

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)

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


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


谢谢!这让我抓狂。我的代码现在100%干净了。:-)另一个荒谬的变化,除了发现这个问题之外,没有办法解决它。谢谢苹果!(讽刺)。谢谢你,埃里克!(不是讽刺)。由于Swift 2中的名称更改,它给了我一个错误“表达式类型不明确,没有更多上下文”。实际上,它不是数组,而是集合。@Lespomes:您可以阅读Swift 2附带的发行说明。谢谢!这让我抓狂。我的代码现在100%干净了。:-)另一个荒谬的变化,除了发现这个问题之外,没有办法解决它。谢谢苹果!(讽刺)。谢谢你,埃里克!(不是讽刺)。由于Swift 2的名称发生了变化,它给了我一个错误“表达式的类型是模糊的,没有更多的上下文”。实际上,它不是一个数组,而是一个集合。@lespomes:你可以阅读Swift 2附带的发行说明。为什么投反对票。这是人们在使用Swift 2后经常犯的错误。我给你一个技术上的理由来解释为什么使用酒吧不再有效!!为什么要投反对票。这是人们在使用Swift 2后经常犯的错误。我给你一个技术上的理由来解释为什么使用酒吧不再有效!!