swift - today - ¿Diferencias en la sintaxis de NSDateComponents?
swift date components (2)
Ahora son un nuevo protocolo. OptionSetType
He estado trabajando en una aplicación de reloj en Swift y con Xcode 6.3.2, el siguiente código se construye y funciona muy bien.
// 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
Sin embargo, cuando cargo el mismo proyecto en Xcode 7.0 beta y no hago ningún cambio, aparece un error en la línea calendar.components.
Could not find member ''CalendarUnitHour''
He mirado la documentación y todas las constantes de NSCalendarUnit están en desuso (en iOS 8.0 dice), pero la descripción del método para el método de componentes todavía dice que las use.
He jugado con otros valores de autocompletado de NSCalendarUnit, pero ninguno produce código de trabajo y no puedo encontrar ningún ejemplo reciente en línea, tal vez porque esto es completamente nuevo.
Alguien sabe la nueva forma correcta de hacer esto?
Swift 2
Los nombres de
NSCalendarUnit
han cambiado en Swift 2.
Además, ahora tenemos que pasar estos argumentos en un conjunto de opciones, como este:
let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date)
Swift 3
Muchas cosas han cambiado, de acuerdo con las Pautas de diseño de API Swift .
Sintaxis actualizada:
let date = Date()
let calendar = Calendar.current()
let components = calendar.components([.hour, .minute, .second, .nanosecond], from: date)
Swift 4
Calendar.current
ahora es una propiedad, y
.components
ha cambiado su nombre a
.dateComponents
.
De lo contrario, es lo mismo que en Swift 3.
let calendar = Calendar.current
let components = calendar.dateComponents([.hour, .minute, .second, .nanosecond], from: date)