在 SwiftUI 中请求用户位置权限

Request User Location Permission In SwiftUI

如何在 SwiftUI 中获取用户位置权限?

我尝试在点击按钮后询问用户位置权限,但对话框在大约一秒钟后消失了。即使您最终及时点击了它,权限仍然会被拒绝。

import CoreLocation
.
.
.
Button(action: {
    let locationManager = CLLocationManager()
    locationManager.requestAlwaysAuthorization()
    locationManager.requestWhenInUseAuthorization()
}) {
    Image("button_image")
}

位置管理器之类的东西应该在您的模型中,而不是您的视图中。

然后您可以在您的模型上调用一个函数来请求位置权限。

您现在正在做的事情的问题是您的 CLLocationManager 在关闭完成后立即被释放。权限请求方法是异步执行的,因此闭包很快结束。

释放位置管理器实例后,权限对话框消失。

位置模型可能如下所示:

class LocationModel: NSObject, ObservableObject {
    private let locationManager = CLLocationManager()
    @Published var authorisationStatus: CLAuthorizationStatus = .notDetermined

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

    public func requestAuthorisation(always: Bool = false) {
        if always {
            self.locationManager.requestAlwaysAuthorization()
        } else {
            self.locationManager.requestWhenInUseAuthorization()
        }
    }
}

extension LocationModel: CLLocationManagerDelegate {

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        self.authorisationStatus = status
    }
}

您可能还需要启动和停止位置更新的功能以及 @Published CLLocation 属性