Передать текущее местоположение в параметре Swift - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь передать текущее местоположение пользователя в параметрах, чтобы получить желаемый результат.Я получаю текущее местоположение следующим образом в моем методе viewDidLoad: -

self.locationManager.requestAlwaysAuthorization()

self.locationManager.requestWhenInUseAuthorization()

if CLLocationManager.locationServicesEnabled() {
     locationManager.delegate = self
     locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
     locationManager.startUpdatingLocation()
 }

После этого я вызвал метод didUpdateLocations, чтобы получить координаты текущего местоположения, и создал две переменные, в которых я сохранил текущее местоположение.

var latitude: String = ""
var longitude: String = ""

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
        print("locations = \(locValue.latitude) \(locValue.longitude)")
        self.latitude = "\(locValue.latitude)" ; self.longitude = "\(locValue.latitude)"
        print(self.latitude, self.longitude)
    }

Но когда я пытаюсь передать свое текущее местоположение в параметрах, я не получаю значения.

let param: [String : Any] =
                                 ["lat": self.latitude,
                                  "lng": self.longitude,
                                  "truck_type": "2",
                                  "title": "home",
                                  "job_type": "Jobs"


                                 ]
    print(param)
    CommonUtils.showHudWithNoInteraction(show: true)

    Alamofire.request("api", method: .post, parameters: param, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

        CommonUtils.showHudWithNoInteraction(show: false)
        switch(response.result) {
        case .success(_):
            if let json = response.result.value as? [String:Any] {
                print(json)

                DispatchQueue.main.async {
                    self.fleetOwnerTableView.reloadData()
                }
            }

            break

        case .failure(_):
            print("Error")
            break

        }
    }

enter image description here Я не знаю, что я делаю не так.Как передать текущее местоположение в параметры?

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Обновите метод didUpdateLocations для вызова API и передачи текущего местоположения

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let location = locations.last {
        callAPI(location: location.coordinate)
    }
}

Ваш метод вызова API

func callAPI(location:CLLocationCoordinate2D) {
    let param: [String : Any] =
        ["lat": "\(location.latitude)",
         "lng": "\(location.longitude)",
         "truck_type": "2",
         "title": "home",
         "job_type": "Jobs"
    ]
    //Alamofire.request
}
0 голосов
/ 03 мая 2019

Зачем передавать их в качестве параметра.Сделайте ваш менеджер местоположения как синглтон.

class LocationManager: NSObject, CLLocationManagerDelegate {

    static let shared = LocationManager()

    let locationManager : CLLocationManager

    override init() {
        locationManager = CLLocationManager()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        super.init()
        locationManager.delegate = self
    }

    func start() {
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let mostRecentLocation = locations.last else {
            return
        }

        print(mostRecentLocation)
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print(error)
        locationManager.stopUpdatingLocation()
    }
} 

Просто позвоните LocationManager.shared.start(), чтобы запустить обновление местоположения и всплыть, у вас будет текущее местоположение в любое время в вашем приложении.Конечно, вы можете создать функцию остановки, чтобы остановить службу определения местоположения, как только вы закончите.

...