2016-08-10 10 views
1

У меня осталось время в формате «dd HH: mm: ss», из которого мне нужно запустить обратный отсчет времени. Я использую этот кодКак запустить время coutdown из оставшегося времени в swift?

func updateCounter() { 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd HH:mm:ss" 
    let date = dateFormatter.dateFromString(timerString) 
    let timeLeft = date!.timeIntervalSinceReferenceDate 
    lblTImer.text = timeLeft.time 
    lblTImer.font = UIFont.init(name: "Gotham-Book", size: 20) 
} 

для обновления метки

extension NSTimeInterval { 
    var time:String { 
     return String(format:"%02d : %02d : %02d : %02d", Int((self/86400)), Int((self/3600.0)%24), Int((self/60.0)%60), Int((self)%60)) 
    } 

} 

, но я не получаю правильное время, поправьте меня, что я делаю неправильно.

+0

Что означает неправильное время? вы получаете нуль или это всегда 2 дня? –

+0

если я передаю «1 22:26:20» в строке времени, тогда я получаю «10957: 16: 57: 22» в ярлыке, его, как и прошло дней, 1, и я получаю 10957 дней –

ответ

0

Почему вы используете NSDateFormatter. На один год и месяц нет в вашем timerString, только час, минута, секунда. Для другого вы забыли настроить часовой пояс.

Ваш timeString представляет продолжительность, в секундах и отформатирован в стиле day hour:minute:second. Насколько я знаю, Cocoa/UITouch не предоставляет подходящий форматтер для этого. Но его просто построить:

extension NSTimeInterval { 
    init(fromString str: String) { 
     let units: [Double] = [1, 60, 3600, 86400] 
     let components = str.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: " :")).reverse() 

     self = zip(units, components) 
       .map { $0 * (Double($1) ?? 0) } 
       .reduce(0, combine: +) 
    } 

    var time:String { 
     return String(format:"%02d : %02d : %02d : %02d", Int((self/86400)), Int((self/3600.0)%24), Int((self/60.0)%60), Int((self)%60)) 
    } 
} 


let timerString = "1 22:26:20" 

let timeLeft = NSTimeInterval(fromString: "1 22:26:20") 
print(timeLeft)   // 167180.0 
print(timeLeft.time) // 01 : 22 : 26 : 20 
+0

спасибо, но как можно Я использую это с таймером, который меняет значение timeLeft? В настоящее время его единственное предоставление «01: 22: 26: 20» –

+0

Это другой вопрос. Что вы здесь спросите, как преобразовать строку в число секунд –