Кажется, вы делаете три левых, чтобы повернуть направо. ObservableObject должен быть только держателем данных.
Мне кажется, было бы лучше, если бы вы делали это вне ObservableObject и чтобы таймер удерживался в View или ViewController.
class StartViewController: UIViewController {
var displayTimer: Timer!
override func viewDidLoad() {
super.viewDidLoad()
//setup the Timer
displayTimer = Timer.scheduledTimer(timeInterval: 60.0,
target: self,
selector: #selector(self.displayTimerFired(_:)),
userInfo: nil,
repeats: false)
}
@objc func displayTimerFired(_ timer: Timer) {
let alertController = UIAlertController(title: "60 Seconds...", message: "60 Seconds have elapsed.", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alertController, animated: true, completion: nil)
//clean up timer
displayTimer.invalidate()
}
}
РЕДАКТИРОВАТЬ
Извините, только что вы поняли, что вы используя SwiftUI
struct TimerView: просмотр {
let timer = Timer.publish(every: 60, on: .main, in: .common).autoconnect()
var body: some View {
.onReceive(timer) { _ in
_ = Alert(title: Text("Warning"), message: Text("The timer will start as soon as you press OK. "), primaryButton: .default(Text("OK"), action: {})
, secondaryButton: .cancel(Text("Not yet.")))
}
}
}