SwiftUI获取位置(经度和纬度)

时间:2019-11-23 18:47:28

标签: swiftui xcode11.2

我有以下代码可从当前位置获取纬度和经度:

import SwiftUI
import MapKit
import Combine

struct ContentView: View {

  @EnvironmentObject var loc: LocationManager

  var body: some View {
      Text(String(format: "%f", loc.lastKnowLocation?.coordinate.latitude ?? 0.0))

  }


}

class LocationManager: NSObject, CLLocationManagerDelegate, ObservableObject {

  private let manager: CLLocationManager

  var objectWillChange = PassthroughSubject<LocationManager, Never>()

  var lastKnowLocation: CLLocation? {
      willSet {
          objectWillChange.send(self)
      }
  }

  init(manager: CLLocationManager = CLLocationManager()) {
      self.manager = manager
      super.init()
  }

  func startUpdating() {
      self.manager.delegate = self
      self.manager.requestWhenInUseAuthorization()
      self.manager.startUpdatingLocation()
  }

  func locationManager(_ manager: CLLocationManager, didUpdateLocations locations:   [CLLocation]) {
    print(locations)
    lastKnowLocation = locations.last
   }

   func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
    if status == .authorizedWhenInUse {
        manager.startUpdatingLocation()
    }
   }


  }

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
    ContentView().environmentObject(LocationManager())
  }
}

我也已经设置了

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>We want to get current location</string>

在info.plist文件中

但是它总是返回“ 0.000000”(loc.lastKnowLocation?.coordinate.latitude为NIL)

并且不会给我有关使用位置隐私授权的任何问题。

任何人都可以帮助修复此代码,或者向我建议另一个代码或参考,以使应用程序获取当前位置的坐标。

谢谢。

0 个答案:

没有答案