Я хочу реализовать NSTimer, чтобы показать хронометр с помощью NSTimeInterval, так что я посмотрел вокруг и нашел этот код, который я положил в мой ViewModel слой:Реализация NSTimer в архитектуре MVVM
public class ViewModel {
public func startTimer() {
//if !timer.valid {
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
startTime = NSDate.timeIntervalSinceReferenceDate()
//}
}
@objc public func updateTime() -> String {
let currentTime = NSDate.timeIntervalSinceReferenceDate()
//Find the difference between current time and start time.
var elapsedTime: NSTimeInterval = currentTime - startTime
//calculate the minutes in elapsed time.
let minutes = UInt8(elapsedTime/60.0)
elapsedTime -= (NSTimeInterval(minutes) * 60)
//calculate the seconds in elapsed time.
let seconds = UInt8(elapsedTime)
elapsedTime -= NSTimeInterval(seconds)
//add the leading zero for minutes, seconds and millseconds and store them as string constants
let strMinutes = String(format: "%02d", minutes)
let strSeconds = String(format: "%02d", seconds)
//concatenate minuets, seconds and milliseconds as assign it to the UILabel
return "\(strMinutes):\(strSeconds)"
}
}
И я хочу показать текущее время, прошедшее с моей точки зрения, поэтому попытался это, но он не работает:
viewModel?.startTimer()
timerLabel.text = viewModel?.updateTime()
Как я могу показать последний результат updateTime()
на моем ViewController этикетке?
FWIW, нет необходимости запускать таймер каждые 0.01 секунд, так как обновления экрана ограничены в 60fps. Вероятно, я бы предложил «CADisplayLink», а не «NSTimer». Кроме того, вместо того, чтобы самостоятельно вычислять затраченное время и строить такую строку, вы можете использовать 'NSDateComponentsFormatter' с' formatter.allowedUnits = [.Minute, .Second] ',' formatter.unitsStyle = .Positional', и 'formatter.zeroFormattingBehavior = .Pad'. Затем, чтобы обновить метку в обработчике ссылок таймера/отображения, это просто 'timerLabel.text = formatter.stringFromDate (startDate, toDate: NSDate())'. – Rob