You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 01:27:03