Xcode 8 beta 4:Calendar.Unit与Calendar.Component

Ger*_*tan 26 swift3 xcode8 xcode8-beta4

这个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)
Run Code Online (Sandbox Code Playgroud)

在Xcode 8中,beta 4 Calendar.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)
Run Code Online (Sandbox Code Playgroud)

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

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

aya*_*aio 30

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

注意:要使调用更简单,可以省略Calendar.Component前缀.

let anchorComponents = calendar.dateComponents([.day, .month, .year, .hour], from: self)
Run Code Online (Sandbox Code Playgroud)

你得到的错误信息有点误导,我猜编译器正在努力进行类型推断.

  • 如果你没有在Date扩展名中使用它,你必须用适当的日期对象替换`self`. (2认同)

Ale*_*ano 28

Swift 3和Swift 4:

在此示例中,您还可以从/到日期准备unitFlags:

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)
Run Code Online (Sandbox Code Playgroud)