用途:在 iOS 17+ 应用中使用 SwiftUI MapKit 与现代 CoreLocation 异步 API 构建地图与位置功能,并可据此评审、改进既有代码。
主要能力:用 Map 与 MapContentBuilder 添加 Marker、Annotation、MapPolyline、MapPolygon、MapCircle;用 MapCameraPosition、.mapStyle()、.mapControls{} 控制相机、样式与控件;用 CLLocationUpdate.liveUpdates() 流式获取定位,iOS 18+ 用 CLServiceSession 管理授权,CLMonitor 做地理围栏;用 CLGeocoder 或 iOS 26+ 的 MKGeocodingRequest/MKReverseGeocodingRequest 做地理编码;用 MKLocalSearchCompleter 与 MKLocalSearch 搜索地点;用 MKDirections 获取路线与 ETA,支持 .automobile、.walking、.transit、.cycling;iOS 26+ 提供 PlaceDescriptor(需 import GeoToolbox)与骑行导航。
使用方式:在 Info.plist 添加 NSLocationWhenInUseUsageDescription(如需后台再加 NSLocationAlwaysAndWhenInUseUsageDescription),在 SwiftUI 的 .task 中启动定位更新,视图消失时自动取消;搜索输入需防抖(约 300ms);路线用 MapPolyline(route.polyline) 绘制。
限制与注意:不要一开始就申请 .authorizedAlways;不要在不可见时保持定位更新;CLPlacemark 属性均为可选,需做空值处理;Completer 不应每次按键都查询;CLMonitor 最多 20 个条件且需保持实例存活;授权被拒要引导到设置;地理编码需处理空结果与网络错误;用 VoiceOver 测试地图。资料未提供收费、价格或平台支持范围。