Итак, я использую DateComponentsFormatter
в ситуации, когда мне нужно отформатировать только наносекунды данного TimeInterval
.Проблема в том, что он просто не работает должным образом, или я запутываю что-то, о чем я не знаю.
Вот 3 быстрых теста, чтобы проиллюстрировать то, что я говорю.
1-й сценарий
let fooFormatter = DateComponentsFormatter()
fooFormatter.allowedUnits = [.second, .nanosecond]
fooFormatter.unitsStyle = .full
fooFormatter.collapsesLargestUnit = true
fooFormatter.allowsFractionalUnits = true
print(fooFormatter.string(from: 42.42424242424242424242424242424242))
Вывод : Optional("42 seconds")
.
Ожидается : поскольку это приводит к свертыванию «наибольшей единицы» - секунд вв этом случае - ожидается что-то вроде (Optional("42.42424242424242424242424242424242 * 1e^9"))
.
2-й сценарий
let fooFormatter = DateComponentsFormatter()
fooFormatter.allowedUnits = [.second, .nanosecond]
fooFormatter.unitsStyle = .full
fooFormatter.allowsFractionalUnits = true
print(fooFormatter.string(from: 42.42))
Вывод : Optional("42 seconds")
.
Ожидается : Даже не решая не свернуть .second
, я ожидал что-нибудь близкое к (Optional("42 seconds 0.42 * 1e^9 nanoseconds"))
.
3-й сценарий
let fooFormatter = DateComponentsFormatter()
fooFormatter.allowedUnits = [.nanosecond]
fooFormatter.unitsStyle = .full
fooFormatter.allowsFractionalUnits = true
print(fooFormatter.string(from: 42.424242))
Вывод : nil
.
Ожидаемый : теперь он даже не распознает TimeInterval
как действительный - когда он определен как наименьшую возможную долю - и, очевидно, ожидал всего в наносекундах.
Важно отметить, что я использовал allowsFractionalUnits = true
, что еще больше тревожит , потому что это поведение также не работает на выходекак указано выше (см. предполагаемое поведение здесь ).
Заранее спасибо.