2015-12-17 2 views
-1

Я создаю таймер обратного отсчета, который показывает часы: минуты: секунды.Как я могу форматировать числа, чтобы иметь всегда две цифры?

Функция У меня есть работа, однако, она возвращает значения, как 1 цифру, если число меньше 10. (напр. 2: 3: 15)

Как отформатировать функцию, чтобы всегда две цифры?

Ищу результат как: 02:03:15

func secondsToHoursMinutesSeconds (seconds : Int) -> (Int, Int, Int) { 
     return (seconds/3600, (seconds % 3600)/60, (seconds % 3600) % 60) 
    } 
+1

Спасибо, что нашли решение – SNos

+0

использовать ''% 02d:% 02d:% 02d "' в качестве форматирования. – holex

ответ

0

Альтернативно, используя DateComponentsFormatter

lazy var dateComponentsFormatter: DateComponentsFormatter = { 
    let formatter = DateComponentsFormatter() 
    formatter.zeroFormattingBehavior = .pad 
    formatter.allowedUnits = [.hour, .minute, .second] 
    return formatter 
}() 

func secondsToHoursMinutesSeconds(seconds: Int) -> String { 
    let hourPad = seconds < 36000 ? "0" : "" // add 0 in front if less than 10 hours 
    return hourPad + dateComponentsFormatter.string(from: seconds)! 
} 

secondsToHoursMinutesSeconds(3602) // 01:00:02 

С DateComponentsFormatter не пэдов часы автоматически zeroFormattingBehavior = .pad, вы должны добавить, что "вручную".
Сам форматируемый объявлен как ленивое вычислимое свойство, чтобы избежать повторного повторного создания.

+0

большое спасибо. Гораздо лучший подход и чистый код – SNos

Смежные вопросы