возможно ли остановить NSTimer до того, как он достигнет указанного времени?

#ios #swift #nstimer

#iOS #swift #nstimer

Вопрос:

Я использую таймер с repeats: false , поэтому он запускается один раз, при этом однократном запуске до достижения временной задержки я хочу остановить выполнение таймера.

     timer?.invalidate()
    timer = nil 
    //is not working
  

приведенный ниже фрагмент кода — это пример, который я пробовал

   var timer : Timer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        timer = Timer()
    }

    @IBAction func startAction(_ sender: Any) {
        timer = Timer.scheduledTimer(withTimeInterval: 10.0, repeats: false, block: { (make) in
            print("ack did")
        })
        
    }
    
    @IBAction func cancelAction(_ sender: Any) {
        timer?.invalidate()
    }
  

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

Ответ №1:

Да, это возможно, и вы даже показали код для остановки таймера. То, что вы опубликовали, будет работать.

Обратите внимание, что строка

     timer = Timer()
  

По-вашему viewDidLoad() бессмысленно. Не создавайте одноразовый таймер только для того, чтобы сделать вашу переменную ненулевой