Повторение таймера с новыми временными интервалами - PullRequest
1 голос
/ 12 января 2020

Привет, это мое первое приложение, и я пытаюсь понять, как выполнить эту простую задачу, но перегружен информацией, и я чувствую, что может быть более простой способ сделать это.

Я пытаюсь создать генератор случайных слов, который будет выбирать из массива слов в случайные промежутки времени. Время должно измениться после срабатывания таймера. Таймер может продолжать работать все время, пока приложение включено.

вот мой код:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    @objc weak var paraTimer: Timer?

    override func viewDidLoad() {
        super.viewDidLoad()

        let randomNum = Int.random(in: 1..<5)

        paraTimer = Timer.scheduledTimer(timeInterval: TimeInterval(randomNum), target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)

   }

/*
This invalidates my timer, not sure if I need to start a new timer now or if I can reset this?
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    paraTimer?.invalidate()
*/

    @objc func runTimedCode() {

        let array = ["Apple", "Banana", "Pear" ]
        label.text = array.randomElement()


    }
}

Так что проблема, которую мне нужно решить, это то, что она выберет случайное число от 1 до 5, а затем не выберет новое число и просто продолжайте работать каждые х секунд. Также я должен сделать недействительным таймер или оставить его выключенным?

Спасибо. Как я уже сказал, я впервые работаю над приложением, которое не просто следует прямому руководству.

1 Ответ

0 голосов
/ 12 января 2020

Чтобы перезапустить таймер с разными интервалами, вы должны воссоздать таймер.

Прежде всего объявите таймер сильным, а @ obj c не требуется

var paraTimer: Timer?

Я рекомендовал создать дополнительный метод. Объявите таймер неповторяющимся и используйте блочный API Timer. Таймер перезапускается.

func restartTimer() {
    let randomNum = Int.random(in: 1..<5)
    paraTimer = Timer.scheduledTimer(timeInterval: TimeInterval(randomNum), repeats: false) { [weak self] _ in
        let array = ["Apple", "Banana", "Pear" ]
        self?.label.text = array.randomElement()
        self?.restartTimer()
    }
}

Запустите таймер в viewWillAppear

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    restartTimer()
}

и остановите его в viewDidDisappear

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    paraTimer?.invalidate()
    paraTimer = nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...