2017-06-11 2 views
0

Ich bin neu bei Swift und iOS-Entwicklung. Ich versuche Countdown für ein bestimmtes Datum. Meine iOS-Countdown-App zählt nach null negativ. Ich möchte bei null aufhören. Wie behebe ich das?Wie Stop Countdown bei 0? - Swift

let currentDate = Date() 
let dateFormatter = DateFormatter() 

let userCalendar = Calendar.current 

let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second] 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true) 
    timer.fire() 



} 

func printTime() 
{ 
    dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss" 
    let startTime = Date() 
    let endTime = dateFormatter.date(from: "11/03/18 10:00:00") 

    let time = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!) 


    dayLabel.text = "\(time.day!)" 
    hourLabel.text = "\(time.hour!)" 
    minuteLabel.text = "\(time.minute!)" 
    secondLabel.text = "\(time.second!)" 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

}

Antwort

0

Try Wechsel:

dayLabel.text = "\(time.day!)" 
hourLabel.text = "\(time.hour!)" 
minuteLabel.text = "\(time.minute!)" 
secondLabel.text = "\(time.second!)" 

zu:

if startTime < endTime { 
    dayLabel.text = "\(time.day!)" 
    hourLabel.text = "\(time.hour!)" 
    minuteLabel.text = "\(time.minute!)" 
    secondLabel.text = "\(time.second!)" 
} else { 
    dayLabel.text = "0" 
    hourLabel.text = "0" 
    minuteLabel.text = "0" 
    secondLabel.text = "0" 
} 

Und je nach Ihrer Situation, könnte man den Timer mit timer.invalidate() wie so aufhören wollen:

... 

var timer: Timer? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true) 
    timer?.fire() 

} 

func printTime() { 

    ... 

    } else { 
     ... 
     timer?.invalidate() 
    } 
} 
+0

Danke LWJ! Es funktionierte. –

+0

@ F.Lale Gern geschehen! – LWJ

+1

vergessen Sie nicht, Ihren Timer zu stoppen timer.invalidate() –

0
let currentDate = Date() 
let dateFormatter = DateFormatter() 
var timer = Timer() 
let userCalendar = Calendar.current 

let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second] 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true) 
    timer.fire() 



} 

func printTime() 
{ 
    dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss" 
    let startTime = Date() 
    let endTime = dateFormatter.date(from: "11/03/18 10:00:00") 

    let time = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!) 

    if time.day! == 0 && time.hour! == 0 && time.minute! == 0 && time.second! == 0 {timer.invalidate()} 

    dayLabel.text = "\(time.day!)" 
    hourLabel.text = "\(time.hour!)" 
    minuteLabel.text = "\(time.minute!)" 
    secondLabel.text = "\(time.second!)" 
} 
Verwandte Themen