FuelMan/Gas Man/LocationManager.swift

56 lines
1.5 KiB
Swift

//
// LocationManager.swift
// Gas Man
//
// Created by Kameron Kenny on 3/17/25.
//
import Foundation
import CoreLocation
import Combine
class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
@Published var location: CLLocation?
@Published var placemark: CLPlacemark?
override init() {
super.init()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
}
func requestLocation() {
manager.requestWhenInUseAuthorization()
manager.requestLocation()
}
// CLLocationManagerDelegate
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let loc = locations.first {
DispatchQueue.main.async {
self.location = loc
}
// Reverse geocode
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(loc) { [weak self] placemarks, error in
if let error = error {
print("Reverse geocode error: \(error)")
return
}
if let firstPlacemark = placemarks?.first {
DispatchQueue.main.async {
self?.placemark = firstPlacemark
}
}
}
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Failed to get user location: \(error)")
}
}