Entonces, estoy usando un DateComponentsFormatter en una situación en la que necesito formatear solo los nanosegundos de un TimeInterval dado. El problema es que simplemente no funciona según lo previsto, o estoy confundiendo algo aquí que no conozco.
Aquí hay 3 pruebas rápidas para ilustrar lo que estoy diciendo.
let fooFormatter = DateComponentsFormatter() fooFormatter.allowedUnits = [.second, .nanosecond] fooFormatter.unitsStyle = .full fooFormatter.collapsesLargestUnit = true fooFormatter.allowsFractionalUnits = true print(fooFormatter.string(from: 42.42424242424242424242424242424242)) Salida : Optional("42 seconds") .
Esperado : debido a que esto colapsa la "unidad más grande" (segundos en este caso), se espera que sea algo como (Optional("42.42424242424242424242424242424242 * 1e^9")) .
let fooFormatter = DateComponentsFormatter() fooFormatter.allowedUnits = [.second, .nanosecond] fooFormatter.unitsStyle = .full fooFormatter.allowsFractionalUnits = true print(fooFormatter.string(from: 42.42)) Salida : Optional("42 seconds") .
Esperado : Incluso sin optar por no colapsar el .second , esperaba algo cercano a (Optional("42 seconds 0.42 * 1e^9 nanoseconds")) .
let fooFormatter = DateComponentsFormatter() fooFormatter.allowedUnits = [.nanosecond] fooFormatter.unitsStyle = .full fooFormatter.allowsFractionalUnits = true print(fooFormatter.string(from: 42.424242)) Salida : nil .
Esperado : ahora ni siquiera reconocerá TimeInterval como válido, cuando se define como la fracción más pequeña posible, y obviamente esperaba todo en nanosegundos.
Es importante tener en cuenta que he usado allowsFractionalUnits = true , lo que es aún más alarmante , porque este comportamiento tampoco funciona en los resultados indicados anteriormente (consulte el comportamiento previsto aquí ).
Gracias por adelantado.
DateComponentsFormatter no admite nanosegundos.
Consulte la documentación de allowedUnits , que no incluye nanosegundos. Dice:
Las unidades de calendario permitidas son:
yearmonthweekOfMonthdayhourminutesecondLa asignación de cualquier otra unidad de calendario a esta propiedad da como resultado una excepción.