2017-09-17 1 views
1

Je fais une application de localisation dans laquelle je stocke ma position sur FireBase, j'obtiens mes coordonnées actuelles dans une fonction .. mais comment puis-je envoyer ces coordonnées à une autre fonction qui les stocke en ligne.Comment puis-je transmettre une valeur d'une fonction à une autre?

Voici mon code:

var latPass: Double! 
var longPass: Double! 

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
{ 
    var location=locations[0] 
    let span:MKCoordinateSpan=MKCoordinateSpanMake(0.01, 0.01) 
    var myLocation:CLLocationCoordinate2D=CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude) 
    let region:MKCoordinateRegion=MKCoordinateRegionMake(myLocation, span) 
    latPass=location.coordinate.latitude 
    longPass=location.coordinate.longitude 

} 

func post(){ 

    let lat=latPass 
    let long=longPass 

    let post : [String: Double]=["lat":lat, "long":long] 
    let dataBaseRef=FIRDatabase.database().reference() 
    dataBaseRef.child("Location").childByAutoId().setValue(post) 

} 

mes latPass & longpass sont les coordonnées que je veux passer à post()

Comment puis-je faire? Aidez-moi!

Répondre

0

Vous les avez déclarés globalement dans votre classe afin que vous puissiez y accéder partout, comme vous l'avez fait maintenant. Pas besoin de créer des variables supplémentaires.

func post() { 
    let post : [String: Double]=["lat":latPass, "long":longPass] 
    let dataBaseRef=FIRDatabase.database().reference() 
    dataBaseRef.child("Location").childByAutoId().setValue(post) 
} 

Sinon, vous pouvez définir les paramètres dans votre fonction post:

func post(lat: Double, long: Double) { 
    let post : [String: Double]=["lat":lat, "long":long] 
    let dataBaseRef=FIRDatabase.database().reference() 
    dataBaseRef.child("Location").childByAutoId().setValue(post) 
} 

Pour appeler après maintenant:

post(lat: 11.000, long: 12.000) 

Mise à jour:
Mettez à jour votre locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) à ceci:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    // if you pass this guard, then you have a valid loction 
    guard let latitude = manager.location?.coordinate.latitude, let longitude = manager.location?.coordinate.longitude else { return } 
    let span:MKCoordinateSpan=MKCoordinateSpanMake(0.01, 0.01) 
    let myLocation:CLLocationCoordinate2D=CLLocationCoordinate2DMake(latitude, longitude) 
    let region:MKCoordinateRegion=MKCoordinateRegionMake(myLocation, span) 
    latPass = latitude 
    longPass = longitude 
    // Call post here because now you have valid a location 
    post() 
} 
+0

Je reçois 'nil' quand j'imprime' latPass' dans mon 'post()' –

+0

@NaveenSaini, vérifiez la mise à jour. Mettez à jour cette fonction. –