locationManager:didChangeAuthorization 对比 locationManagerDidChangeAuthorization

locationManager:didChangeAuthorization vs locationManagerDidChangeAuthorization

在 iOS 应用中使用 SwiftUICoreLocation。我需要关注用户授予的位置访问权限的状态。

查看 CLLocationManagerDelegate 的文档,我似乎应该使用 locationManagerDidChangeAuthorization 方法。

问题是这个方法永远不会被调用(据我所知)。此外,另一种方法 locationManager:didChangeAuthorization(应该被弃用)似乎可以完成这项工作。

如果有人有什么好的建议,请告诉我。

locationManagerDidChangeAuthorization 仅在 iOS 14 中可用。如果您 运行 是 iOS 的早期版本,则需要使用较旧的方法,locationManager:didChangeAuthorization.虽然它已被弃用,但它仍然有效(如果您支持早期 iOS 版本,则必须使用它)。

委托方法更改的原因包含在WWDC 2020 session - 在iOS 14 位置权限有时间权限(never/when 在use/always)和新的精度权限(high/low 精度)。

原始委托方法将时间权限传递给委托方法,但不传递精度信息(因为以前不存在该权限)。

Apple 没有创建一个新的委托方法来接收时间和精度权限详细信息,而是选择了一个简单的方法来告诉您某些内容已更改。然后您需要编写代码来检查 CLLocationManager 以确定您拥有的权限以及如何处理它。

为什么他们这样做,我们只能推测,但我怀疑这给了他们将来在不改变方法签名的情况下添加更多权限的灵活性。