Ich versuche, diese Funktion Arbeit mit einem Fortschrittsbalken zu machen:Funktion mit einem CGFloat als Parameter
var progressTimer: Timer?
var time: CGFloat = 0
func setProgress(duration: CGFloat) {
time += 0.1
progressFront.progress = time/duration
if time >= duration {
progressTimer?.invalidate()
}
}
func updateProgress() {
progressTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: (#selector(ViewController.setProgress)), userInfo: nil, repeats: true)
}
func pauseUpdateProgress() {
progressTimer?.invalidate()
}
die Funktion wie folgt aufrufen und es does 't nur Arbeit:
setProgress(duration: 20)
Während, wenn ich es wie folgt hartcode, funktioniert es ganz gut:
func setProgress() {
time += 0.1
progressFront.progress = time/20
if time >= 20 {
progressTimer?.invalidate()
}
}
Was mache ich falsch?
können Sie den gesamten Klassencode anzeigen? –
Vielleicht nicht verwandt, aber vermeiden Sie Funktionsnamen, die mit 'set' beginnen. Sie könnten Eigentumseinrichter stören. Und wenn Sie die Funktion als Timer-Selektor verwenden, funktioniert das nicht, weil Sie die Timer-Instanz nur als Parameter übergeben können. – vadian
@vadian Danke für deinen Rat und Kommentar. Ich benutze die Funktion scheinbar unangemessen als Timer-Selektor (aktualisiert den Code). Was kann ich tun, um diese Funktion wiederverwendbar zu machen? –