SwiftUI LocationManager как убрать постоянное обновление вьюхи?

Чтобы убрать постоянное обновление вьюхи при использовании LocationManager в SwiftUI, можно воспользоваться следующими шагами:

1. Создайте отдельный класс для обработки геолокации, который будет реализовывать протокол CLLocationManagerDelegate. В этом классе вы можете настроить и управлять LocationManager.

import CoreLocation

class LocationManager: NSObject, CLLocationManagerDelegate {
   let manager = CLLocationManager()
   
   override init() {
      super.init()
      
      manager.delegate = self
   }
   
   func startLocationUpdates() {
      manager.requestWhenInUseAuthorization()
      manager.startUpdatingLocation()
   }
   
   // Добавьте необходимые методы протокола CLLocationManagerDelegate
   // например, locationManager(_:didUpdateLocations:)
}

2. Создайте ObservableObject для отслеживания изменений местоположения.

import SwiftUI
import CoreLocation

class LocationViewModel: ObservableObject {
   @Published var location: CLLocation?

   private let locationManager = LocationManager()

   init() {
      // Здесь можно настроить необходимые настройки геолокации
   }

   func startUpdatingLocation() {
      locationManager.startLocationUpdates()
   }

   // Добавьте необходимые методы для обработки изменений местоположения
   // например, locationManager(_:didUpdateLocations:)
}

3. В вашей SwiftUI-вьюхе создайте экземпляр LocationViewModel и подпишитесь на изменения местоположения.

import SwiftUI
import CoreLocation

struct ContentView: View {
   @StateObject var viewModel = LocationViewModel()

   var body: some View {
      VStack {
         // Выводим значения, связанные с местоположением
         Text("Latitude: (viewModel.location?.coordinate.latitude ?? 0)")
         Text("Longitude: (viewModel.location?.coordinate.longitude ?? 0)")
      }
      .onAppear {
         viewModel.startUpdatingLocation()
      }
   }
}

В результате, вьюха будет обновляться только при изменении значения местоположения, которое генерирует LocationManager. Это позволяет избежать постоянного обновления вьюхи.