В моем проекте у меня есть класс LocationService , который соответствует протоколу CLLocationManagerDelegate
для определения местоположения текущего пользователя.
class LocationService: NSObject, CLLocationManagerDelegate {
fileprivate let locationManager = CLLocationManager()
var location: Location? // Location(lat: Double, lon: Double)
override init() {
super.init()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
}
func getCurrentLocation() -> Location? {
locationManager.startUpdatingLocation()
// how can I catch a location?
return location
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.last {
if location.horizontalAccuracy > 0 {
locationManager.stopUpdatingLocation()
self.location = Location(lat: location.coordinate.latitude, lon: location.coordinate.latitude)
}
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print(error.localizedDescription)
}
}
Я хочу, чтобы мой WeatherPresenter запускал обновления местоположения в LocationService
и получал результат, как только местоположение было найдено.Есть ли способ сделать это?
class WeatherPresenter {
unowned let delegate: WeatherViewDelegate
let weatherService = WeatherService()
let locationService = LocationService()
init(with delegate: WeatherViewDelegate) {
self.delegate = delegate
}
func getWeatherForCurrentLocation() {
if let location = locationService.getCurrentLocation() {
//...
}
}
}