2016-02-27 1 views
0

Dans mon application, j'ai besoin de l'emplacement de l'utilisateur plusieurs fois, j'ai donc créé une classe utilitaire pour obtenir les coordonnées. Cela ne fonctionne pas comme prévu, puisque je veux appeler une fonction pour retourner directement les coordonnées, mais cela ne fonctionne pas car il dine de manière asynchrone. Je veux, dans mon viewcontroller, pour pouvoir l'appeler comme un singleton, comme ceci:Classe utilitaire pour retourner l'emplacement GPS dans swift?

coords = GPSUtil.sharedInstance.getCoordinates() 

Avec l'utilisation de la fonction suivante:

public func getCoordinates() -> CLLocation { 
    // return the CLLocation here. 
} 

public func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    let latestLocation: AnyObject = locations[locations.count - 1] 
    initialLocation = latestLocation as! CLLocation 
} 

Au moment où mon LocationManager attribue juste le CLLocation à une propriété, mais je veux en fait la méthode ci-dessus pour le retourner. Peut-il être fait?

Répondre

0

On dirait que vous devez ajouter un var à votre classe utilitaire, comme ceci:

class GPSUtil { 
    var latestLocation = CLLocation(latitude: 0, longitude: 0) //initial init 

    public func getCoordinates() -> CLLocation { 
     return self.latestLocation 
    } 

    public func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

     self.latestLocation = locations[locations.count - 1] 
    } 
} 
+0

Je belive j'ai essayé, et il semble qu'il retourne avant l'emplacement a été dertermined? Comme il faut un certain temps pour appeler locationManager.startUpdatingLocation() jusqu'à ce qu'il détermine. – Recusiwe

+0

Sans voir le reste de votre code, je ne peux pas commenter pourquoi il pourrait ne pas fonctionner. Plus précisément, je ne sais pas comment vous appelez 'didUpdateLocations'. – sschale

+0

Je crois qu'il est appelé automatiquement lors de l'appel à locationManager.startUpdatingLocation(), et le problème semble être, que si je retourne juste la propriété, il ne sera pas assigné avant plus tard. Donc je crois que je dois attendre que la propriété soit assignée dans la fonction locationManager, je ne sais pas comment. – Recusiwe