как остановить таймер издателя?

Я какое-то время играю с издателем таймеров на детской площадке. ниже мой код

let timer = Timer
    .publish(every: 1.0, on: .main, in: .common)
.autoconnect()

var counter = 0
let subscriber = timer
    .map({ (date) -> Void in
        counter += 1
    })
    .sink { _ in

        print("I am printing the counter \(counter)")
}

if counter > 5 {
    timer.upstream.connect().cancel() //1.nothing happened
    subscriber.cancel() //2. nothing happened too. :(
}

Но я не мог остановить таймер, используя как строку 1, так и строку 2. Что мне на самом деле не хватает?


person elk_cloner    schedule 07.06.2020    source источник


Ответы (1)


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

let timer = Timer
    .publish(every: 1.0, on: .main, in: .common)
.autoconnect()

var counter = 0
let subscriber = timer
    .map({ (date) -> Void in
        counter += 1
    })
    .sink { _ in

        print("I am printing the counter \(counter)")
        if counter >= 5 {
                  print("greater than 5")
                  timer.upstream.connect().cancel()

              }
}
person Jawad Ali    schedule 07.06.2020