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
    }
}