Я хотел бы удалить CLLocationManagerDelegate из моего ViewController и добавить в отдельный класс и сделать его повторно используемым. Я довольно новичок в Swift, поэтому я прошу вашей помощи, может быть, вы можете указать мне правильное направление.
Моя цель - вызывать мой класс LocationHandler каждый раз, когда я хочу узнать местоположение пользователя и большую часть раз я хотел бы обрабатывать местоположение по-другому (например, просто сохранить его как есть или в другой раз проверить местоположение и, если оно соответствует определенным правилам, сохранить его и т. д. c ...)
Я хотел бы передайте функцию моему классу LocationHandler, если возможно обработать изменение местоположения.
примерно так: (это просто псевдокод, я не знаю, как это сделать правильно в swift )
let locationHandler = LocationHandler ()
locationHandler.handleLocationChange = (location: [CLLocation]) -> {...}
locationHandler.getCurrentLocation ()
Моя первая проблема - когда я создаю экземпляр из моего LocationHandler, функция getCurrentLocation работает правильно, но didUpdateLocations никогда не повышается (я думаю, что это так что-то с делегацией)
Во-вторых, я понятия не имею, как передать функцию в класс в качестве параметра
, вот мой класс LocationHandler
import Foundation
import CoreLocation
class LocationHandler: NSObject, CLLocationManagerDelegate{
let locationManager = CLLocationManager()
override init(){
super.init()
locationManager.delegate = self
}
func getCurrentLocation(){
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
case .notDetermined, .restricted, .denied:
print("No access")
case .authorizedAlways, .authorizedWhenInUse:
print("Access")
@unknown default:
break
}
} else {
print("Location services are not enabled")
}
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.first {
print("Found user's location: \(location)")
//do something with the location
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Failed to find user's location: \(error.localizedDescription)")
}
}
, и я используйте его в viewcontroller следующим образом:
let locationHandler = LocationHandler()
locationHandler.getCurrentLocation()