Я пытаюсь выполнить Службу определения местоположения один раз. Этот LocationService вызывается из другого класса объектов, который добавит информацию о местоположении в параметры. Все это будет один объект.
Проблема в том, что когда я инициализирую объект, все заполняется за исключением данных о местоположении, которые будут заполнены через несколько мс.
Мне нужнодождитесь выполнения обратного вызова, чтобы успешно сгенерировать полный объект, прежде чем использовать его
Итак, учитывая, что у меня есть следующий класс " LocationService "
public class LocationService: NSObject, CLLocationManagerDelegate{
let manager = CLLocationManager()
var locationCallback: ((CLLocation?) -> Void)!
var locationServicesEnabled = false
var didFailWithError: Error?
public func run(callback: @escaping (CLLocation?) -> Void) {
locationCallback = callback
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
manager.requestWhenInUseAuthorization()
locationServicesEnabled = CLLocationManager.locationServicesEnabled()
if locationServicesEnabled {
manager.startUpdatingLocation()
}else {
locationCallback(nil)
}
}
public func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
locationCallback(locations.last!)
manager.stopUpdatingLocation()
}
public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
didFailWithError = error
locationCallback(nil)
manager.stopUpdatingLocation()
}
deinit {
manager.stopUpdatingLocation()
}
}
И это вызывается из класса объекта следующим образом:
class ObjectX: NSObject{
//Class variables
@objc override init() {
let getLocation = LocationService()
getLocation.run {
if let location = $0 {
//get location parameters
}}
Наконец, класс ObjectX инициируется и используется из другого места
let getLocation = ObjectX()
//After initiate it I use the object for other purposes, but here the object is not complete, the location parameters have not been populated yet
Как я могуждать в классе, который его вызывает, пока не будет выполнен обратный вызов? Должен ли я использовать getLocation.performSelector ()? Как?