Отформатируйте секундомер в реальном времени до сотого с помощью Swift

У меня есть приложение, использующее NSTimer с интервалом обновления 0,01 секунды для отображения текущего секундомера в формате String как 00: 00.00 (mm: ss.SS). (По сути, клонирование встроенного секундомера iOS для интеграции в математические задачи спортивного времени в реальном времени, возможно, в будущем потребуется точность в миллисекунды)

Я использую (неправильно) NSTimer для принудительного обновления UILabel. Если пользователь нажимает Start, это код NSTimer, используемый для начала повторения функции:

displayOnlyTimer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("display"), userInfo: nil, repeats: true)

А вот функция, которая выполняется вышеупомянутым NSTimer:

func display() {
    let currentTime = CACurrentMediaTime() - timerStarted + elapsedTime

    if currentTime < 60 {
        timeDisplay.text = String(format: "%.2f", currentTime)
    }else if currentTime < 3600 {
        var minutes = String(format: "%00d", Int(currentTime/60))
        var seconds = String(format: "%05.2f", currentTime % 60)
        timeDisplay.text =  minutes + ":" + seconds
    }else {
        var hours = String(format: "%00d", Int(currentTime/3600))
        var minutes = String(format: "%02d", (Int(currentTime/60)-(Int(currentTime/3600)*60)))
        var seconds = String(format: "%05.2f", currentTime % 60)
        timeDisplay.text =  hours + ":" + minutes + ":" + seconds
    }
}

Там будет по крайней мере 2 ссылки показа одновременно. Будет ли этот метод слишком неэффективным, когда все остальные элементы будут в игре?

Затем дисплей обновляется без использования NSTimer, когда пользователь нажимает «Стоп / Пауза / Сброс». Я не нашел ничего, что прямо переведено на Swift. Я почти уверен, что использую неэффективный метод для быстрого обновления текста UILabel в UIView.

Больше деталей: я работаю над менее запутанным кодом для текущего формата таймера (mm: ss.SS). Я обновлю это еще раз, когда я закончу это.

ОБНОВЛЕНИЕ: Спасибо Робу и jtbandes за ответы на оба моих вопроса (метод форматирования и метод обновления дисплея). Было легко заменить NSTimer (см. Выше) на CADisplayLink ():

displayLink = CADisplayLink(target: self, selector: Selector("display"))
        displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)

А затем заменить все экземпляры в коде

displayOnlyTimer.invalidate() 

с

displayLink.paused = true 

(это приостановит обновление отображаемой ссылки)

Ответы на вопрос(2)

Ваш ответ на вопрос