iOS 26.0中placemark弃用后,SwiftUI如何获取并显示用户sublocality?
iOS 26.0 替换弃用的placemark获取SubLocality方案
iOS 26.0里MKMapItem.placemark被标记为弃用,官方推荐使用address、location和addressRepresentations替代。要获取subLocality,直接通过address属性对应的标准邮政地址对象即可实现,修改后的代码如下:
import Contacts func getUserSubLocality() async { do { let request = MKReverseGeocodingRequest(location: userLocation) let mapItems = try await request.mapItems guard let mapItem = mapItems.first else { return } // 从新的address属性中提取邮政地址 if let postalAddress = mapItem.address?.postalAddress { if let subLocality = postalAddress.subLocality { self.subLocality = subLocality } } } catch { print("反向地理编码出错: \(error.localizedDescription)") } }
关键说明
- 必须导入
Contacts框架,因为CNPostalAddress属于该框架下的API - 原代码中多层
if let可以用guard简化逻辑,提升可读性 mapItem.address返回MKPlacemarkAddress类型,通过postalAddress属性能拿到符合标准的CNPostalAddress,直接读取subLocality即可得到原功能中的子区域信息
如果需要适配多地区地址展示或自定义格式,还可以使用addressRepresentations获取不同格式的地址对象,但仅获取subLocality的话,上述方案最简洁直接。
内容的提问来源于stack exchange,提问作者SPR
相关产品推荐
相关产品推荐

