2016-07-06 4 views
0

Ich verwende das CoreLocation Framework, um den Standort des Benutzers beim Öffnen meiner App abzurufen. Ich benutze diese Funktion:Wie die Längen- und Breitengradwerte der locationManager-Funktion an anderer Stelle in meiner App in Swift verwendet werden können

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    var locValue:CLLocationCoordinate2D = manager.location!.coordinate 


    print("locations = \(locValue.latitude) \(locValue.longitude)") 

} 

des Benutzers Längen- und Breitengrad-Position zu bekommen, und ich kann sie sehen, indem sie in die Protokolle zu drucken. Das funktioniert gut.

woanders in meiner App (aber in der gleichen viewController.swift Datei) Ich habe Code, der die OpenWeatherMap API verwendet, und ich habe eine Zeichenfolge, die die URL für diese enthält, die JSON zurückgeben.

In meinem viewDidLoad, verwende ich:

getWeatherData("http://api.openweathermap.org/data/2.5/weather?lat=XXXXXX&lon=XXXXXX&appid=(MY-APP-ID)") 

ich die lange und Lat Werte vergeben müssen, die ich in der locationManager Funktion erworben haben, in diese Zeichenfolge, die ich weiß, dass ich von "\()" tun können innerhalb die URL-Zeichenfolge.

Mein Problem ist, ich kann diese Werte derzeit nur innerhalb der locationManager Funktion verwenden. Wie kann ich sie in einem Wert außerhalb dieser Funktion speichern, damit ich sie in meine URL-Zeichenfolge einfügen kann?

Danke

Antwort

2

Hoffe das beantwortet Ihre Frage.

import UIKit 
import MapKit 

class myClass { 

    var userLocation: CLLocationCoordinate2D? // The user location as an Optional stored as a var in class "myClass". 
    // !!! This can be accessed everywhere within the class "myClass" (and deeper) 

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let locValue:CLLocationCoordinate2D = manager.location!.coordinate // Change it from var to let since it's only read not writen 
     // !!! This can be accessed everywhere within the func "locationManager" (and deeper) 

     userLocation = locValue // !!! Store it if necessary 

     // Why would you call this in viewDidLoad? I doubt the user location will be available at this point (but it might). You can move this anywhere if you want 
     // note the "\(name)" this will turn the var name into a string 
     // if != nil not necessary here since it cannot be nil but still added it regardless 
     // Maybe you want to add a check so this only gets called on the first location update. It depends on what you need it for. 
     if userLocation != nil { 
      getWeatherData("http://api.openweathermap.org/data/2.5/weather?lat=\(userLocation!.latitude)&lon=\(userLocation!.latitude)&appid=(MY-APP-ID)") // Why would you call this in viewDidLoad? I doubt user doubt the user location will be available at this point (but it might) 
     } 
     else { 
      print("Error: User not Located (yet)") 
     } 
    } 
} 
+0

Das ist, was ich im Begriff war, schlagen Sie vor: Rufen Sie nicht 'getWeatherData' in' viewDidLoad', es nennen, wenn Sie, dass Daten (in '' Locationmanager ...). Wenn Sie die Daten danach woanders brauchen, warum speichern Sie sie nicht in einem var Ihrer Klasse? – Gero

Verwandte Themen