【问题标题】:Xcode 8 beta 4: Calendar.Unit vs Calendar.ComponentXcode 8 beta 4:Calendar.Unit 与 Calendar.Component
【发布时间】:2016-08-02 09:28:41
【问题描述】:

这个 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 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)

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

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

【问题讨论】:

    标签: swift3 xcode8 xcode8-beta4


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 如果您没有在 Date 扩展中使用它,您必须将 self 替换为适当的日期对象。
    【解决方案2】:

    Swift 3 和 Swift 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 2016-10-20
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多