我有以下代码可从当前位置获取纬度和经度:
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)
并且不会给我有关使用位置隐私授权的任何问题。
任何人都可以帮助修复此代码,或者向我建议另一个代码或参考,以使应用程序获取当前位置的坐标。
谢谢。