2017-02-22 4 views
1

Ich habe eine einfache Timer in swift 3. erstelltSwift Timer Etikett wiederkehrende 9

Aus irgendeinem Grund aber, obwohl das Etikett Anzeige zu viele Zahlen arbeitet: S zeigt es eine verrückte Menge von 9 Jahren. Geht es um Rundungen?

Danke, Code unten :)


var swiftTimer : Timer? 
var swiftCounter: Double = 0.00 

@IBOutlet weak var displayTimeLBL: UILabel! 

@IBAction func start(_ sender: Any) { 
    swiftTimer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.updateCounter), userInfo: nil, repeats: true) 

    } 

@IBAction func stop(_ sender: Any) { 
    if swiftTimer != nil{ 
     swiftTimer?.invalidate() 
     swiftCounter = 0.00 
     updateLabel() 
     swiftTimer = nil 
    } 
} 

func updateLabel(){ 
    displayTimeLBL.text = String(swiftCounter) 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

func updateCounter(){ 
    swiftCounter+=0.01 
    round(swiftCounter) 
    updateLabel() 
} 

enter image description here

+1

Warum brauchen Sie Ihren Timer 100-mal pro Sekunde wiederholen? Sie müssen dem Benutzer nicht jeden einzelnen Bruchteil einer Sekunde anzeigen –

+2

Verwenden Sie keinen Zeitgeber, um die Zeit zu messen. Speichern Sie einfach das Startdatum und erhalten Sie die Zeit von jetzt an –

+0

Was wollten Sie rund machen? Willst du, dass der Timer um Sekunden steigt? Millisekunden? –

Antwort

1

einfachste Lösung:

func updateCounter(){ 
     swiftCounter+=0.01 
     round(swiftCounter) 
     swiftCounter = Double(round(100*swiftCounter)/100) 
     updateLabel() 
    } 
0

Wenn Sie zwei Fraktionen wollen, dann können Sie swiftCounter.round(2) statt round(swiftCounter)

verwenden Sie den Text Verwendung zu aktualisieren:

displayTimeLBL.text = "\(swiftCounter.round(2))" 

Hier ist die Double Erweiterung verwendet:

extension Double { 
    func round(_ places: Int) -> Double { 
     let divisor = pow(10.0, Double(places)) 
     return (self * divisor).rounded()/divisor 
    } 
}