26

这段 Swift 3 代码一直工作到 XCode 8 beta 3:

let calendar = Calendar.current
let anchorComponents = calendar.components([Calendar.Unit.day, Calendar.Unit.month, Calendar.Unit.year, Calendar.Unit.hour], from: self)

在 Xcode 8 beta 4Calendar.Unit中似乎被重命名为Calendar.Component.

现在这段代码

let calendar = Calendar.current
let anchorComponents = calendar.components([Calendar.Component.day, Calendar.Component.month, Calendar.Component.year, Calendar.Component.hour], from: self)

产生编译器错误cannot convert value of type Calendar.Component to NSCalendar.Unit

我做错了什么还是这是一个错误?

4

2 回答 2

31

在 Xcode 8 beta 4 附带的 Swift 版本中,components已重命名为dateComponents.

注意:为了使调用更简单,您可以省略Calendar.Component前缀。

let anchorComponents = calendar.dateComponents([.day, .month, .year, .hour], from: self)

您收到的错误消息有点误导,我猜编译器正在努力进行类型推断。

于 2016-08-02T12:28:23.733 回答
31

斯威夫特 3 和斯威夫特 4:

在此示例中,您还可以准备您的 unitFlags from/to date:

let calendar = NSCalendar.current
let unitFlags = Set<Calendar.Component>([.day, .month, .year, .hour])
let anchorComponents = calendar.dateComponents(unitFlags, from: startDate as Date,  to: endDate as Date)
于 2016-09-21T07:49:51.930 回答