【问题标题】:Differences in NSDateComponents syntax?NSDateComponents 语法的差异?
【发布时间】:2015-08-28 04:44:29
【问题描述】:

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

我尝试过使用其他 NSCalendarUnit 自动完成值,但没有一个能产生工作代码,而且我在网上找不到任何最近的示例,可能是因为这是全新的。

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

【问题讨论】:

    标签: swift swift2 nscalendar nsdatecomponents


    【解决方案1】:

    斯威夫特 2

    NSCalendarUnit 的名称在 Swift 2 中已更改。

    此外,现在我们必须在 OptionSet 中传递这些参数,如下所示:

    let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date)
    

    斯威夫特 3

    根据Swift API Design Guidelines,很多事情都发生了变化。

    更新语法:

    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)
    

    【讨论】:

    • 谢谢!这让我发狂。我的代码现在 100% 干净。 :-)
    • 另一个荒谬的变化除了找到这个 SO 问题之外没有办法弄清楚。感谢苹果! (讽刺)。谢谢埃里克! (不是讽刺)。
    • 由于 Swift 2 中的名称更改,它给了我错误“表达式类型不明确,没有更多上下文”。
    • 其实不是数组,而是集合。
    • @lespommes:您可以阅读 Swift 2 附带的发行说明。
    【解决方案2】:

    【讨论】:

    • 为什么投反对票。这是自从迁移到 Swift 2 以来人们常犯的错误。我正在为您提供使用栏 | 的技术原因。已经不行了!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多