本篇文章将会介绍一下在SwiftUI
中如何通过CorLocation
框架获取用户的位置信息,因为获取位置信息属于用户的隐私信息,所以需要在Info.plist
文件里面加上访问位置权限的说明。
关于位置信息,可以请求两种级别的许可:always
和when in use
。根据我们应用需求进行选择。我们需要在Info.plist
文件上上添加这个条目,同时必须提供一个描述,向用户解释为什么你的应用程序需要位置信息(该文本将出现在询问用户权限的对话框中),比如说:“XXX App需要访问您的位置以提供基于位置的服务。”
本文采用when in use
这种方式:

下面创建一个处理位置信息的类LocationManager
。
import Foundation
import CoreLocation
final class LocationManager: NSObject, CLLocationManagerDelegate, ObservableObject {
// 记录位置信息
@Published var currentLocation: CLLocationCoordinate2D?
// 初始化CLLocationManager实例
private var locManager = CLLocationManager()
func checkLocationAuthorization() {
// 设置代理
locManager.delegate = self
// 获取用户授权状态
let authorizationStatus = locManager.authorizationStatus
DispatchQueue.global().async {
[weak self] in
// 判断用户设备的系统位置权限是否开启,而非App的。该判断需要异步进行,否则会卡主线程。
if CLLocationManager.locationServicesEnabled() {
// 如果设备系统位置权限开启了,回主线程继续操作
DispatchQueue.main.async {
if authorizationStatus == .authorizedAlways || authorizationStatus == .authorizedWhenInUse {
// 如果用户授权了,开启位置更新。
self?.locManager.