Назначенная метка не отображает обратный отсчет - PullRequest
1 голос
/ 18 апреля 2020

У меня реализован обратный отсчет, но в настоящее время метка, назначенная для отображения значения, вообще не показывает значение. Я попытался распечатать (countdownLabel), чтобы увидеть, если это запись, в которой возвращаются свойства метки, а не обратный отсчет. Заранее спасибо!

class CountdownViewController: UIViewController {

    @IBOutlet weak var iconImage: UIImageView!
    @IBOutlet weak var countdownLabel: UILabel!

    //Countdown
    let futureDate: Date = {
        let future = DateComponents(
            year: 2021,
            month: 1,
            day: 06,
            hour: 09,
            minute: 32 ,
            second: 45
        )
        return Calendar.current.date(from: future)!

    }()

    var countdown: DateComponents {
        return Calendar.current.dateComponents([.day, .hour, .minute, .second], from: Date(), to: futureDate)
    }

    @objc func updateTime() {
        let countdown = self.countdown //only compute once per call
        let days = countdown.day!
        let hours = countdown.hour!
        let minutes = countdown.minute!
        let seconds = countdown.second!
        self.countdownLabel.text = String(format: "%02d:%02d:%02d:%02d", days, hours, minutes, seconds)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        func runCountdown() {
            Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
        }
        runCountdown()
        (print(countdown))
        (print(countdownLabel as Any))
    }
}

1 Ответ

0 голосов
/ 18 апреля 2020

Проблема в вашем коде в том, что вы объявили функцию runCountdown() внутри другой функции viewDidLoad(), но впоследствии не вызывали runCountdown().

override func viewDidLoad() {
    super.viewDidLoad()
    func runCountdown() {
        Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
    }
    runCountdown()
    (print(countdown))
    (print(countdownLabel as Any))
}
...