NSDateComponents 语法的差异?
Differences in NSDateComponents syntax?
我一直在 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 中说),但组件方法的方法描述仍然说要使用它们。
我尝试过其他 NSCalendarUnit 自动完成值,但 none 生成了工作代码,但我在网上找不到任何最近的示例,也许是因为这是全新的。
有人知道新的正确方法吗?
Swift 2
NSCalendarUnit
名称已在 Swift 2 中更改。
此外,现在我们必须在 OptionSet 中传递这些参数,如下所示:
let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date)
Swift 3
根据 Swift API Design Guidelines.
,许多事情都发生了变化
更新后的语法:
let date = Date()
let calendar = Calendar.current()
let components = calendar.components([.hour, .minute, .second, .nanosecond], from: date)
Swift 4
Calendar.current
现在是 属性,并且 .components
已重命名为 .dateComponents
。否则它与 Swift 中的相同 3.
let calendar = Calendar.current
let components = calendar.dateComponents([.hour, .minute, .second, .nanosecond], from: date)
它们现在是一个新协议。
选项设置类型
我一直在 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 中说),但组件方法的方法描述仍然说要使用它们。
我尝试过其他 NSCalendarUnit 自动完成值,但 none 生成了工作代码,但我在网上找不到任何最近的示例,也许是因为这是全新的。
有人知道新的正确方法吗?
Swift 2
NSCalendarUnit
名称已在 Swift 2 中更改。
此外,现在我们必须在 OptionSet 中传递这些参数,如下所示:
let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date)
Swift 3
根据 Swift API Design Guidelines.
,许多事情都发生了变化更新后的语法:
let date = Date()
let calendar = Calendar.current()
let components = calendar.components([.hour, .minute, .second, .nanosecond], from: date)
Swift 4
Calendar.current
现在是 属性,并且 .components
已重命名为 .dateComponents
。否则它与 Swift 中的相同 3.
let calendar = Calendar.current
let components = calendar.dateComponents([.hour, .minute, .second, .nanosecond], from: date)
它们现在是一个新协议。 选项设置类型