CLLocationManager.authorizationStatus()返回当前的授权级别,并且可以在条件中使用。问题在于authorizationStatus()是一个仅在创建视图时才被调用一次的函数,而不会在更新授权状态时刷新。也可以使用didChangeAuthorizationStatus实现一个委托,该委托可以更新@State变量,但是然后在关闭并重新打开应用程序时,@ State将被重置,并且didChangeAuthorizationStatus不会被调用(如果之前已被授权)。有什么好的方法可以根据CLLocationManager授权状态显示视图?
if(CLLocationManager.authorizationStatus() == .notDetermined){
Button(action: {self.locationmanager.requestWhenInUseAuthorization()}){
Text("Authorize Location").padding()
}
}
else if(CLLocationManager.authorizationStatus() == .denied || CLLocationManager.authorizationStatus() == .restricted || CLLocationManager.authorizationStatus() == .authorizedWhenInUse){
Text("Please enable always on location in settings and restart the app to use")
}
else{
/*Show view */
}
在上述情况下,无论状态是否更改,条件分支仅计算一次。