Xcode 8 beta 4:Calendar.Unit 与 Calendar.Component
Posted
技术标签:
【中文标题】Xcode 8 beta 4:Calendar.Unit 与 Calendar.Component【英文标题】:Xcode 8 beta 4: Calendar.Unit vs 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
我做错了什么还是这是一个错误?
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于Xcode 8 beta 4:Calendar.Unit 与 Calendar.Component的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 8 Beta 4 CGColor.components 不可用
在 Xcode 8 beta 4 中,隐式展开的选项数组永远迭代
Xcode 8 beta 4:在物理设备上运行时“无法附加到 pid:1110”
iPhone 升级到 iOS 8.4 后在 Xcode 7 beta2 中成为不合格设备