一尘不染

NSDateComponents语法有区别吗?

swift

我一直在使用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中它说),但是component方法的方法描述仍然说要使用它们。

我使用了其他NSCalendarUnit自动完成值,但是没有一个能产生有效的代码,而且我在网上找不到任何最新示例,也许是因为这是全新的。

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


阅读 232

收藏
2020-07-07

共1个答案

一尘不染

迅捷2

NSCalendarUnit名称在斯威夫特2改变。

另外,现在我们必须在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)
2020-07-07