var workItem: DispatchWorkItem? = nil ... override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let indicator = activityIndicator() indicator.startAnimating() workItem = DispatchWorkItem { // долгая команда DispatchQueue.main.async { indicator.stopAnimating() indicator.hidesWhenStopped = true } } DispatchQueue.global(qos: .utility).async(execute: workItem!) } ... override func viewDidDisappear(_ animated: Bool) { if let workItem = workItem { workItem.cancel() self.workItem = nil } }