Swift如何调用APICaller返回的Vehicles结构体数据在MapViewController的MapKit中使用经纬度
实现方案
你可以按照以下步骤完成替换:
- 第一步:在
MapViewController中定义属性,接收接口返回的车辆数据
// 持有单台车辆数据,如果接口返回的是车辆数组,可定义为 var vehicles: [Vehicles] = [] var targetVehicle: Vehicles?
- 第二步:在
APICaller的接口请求成功回调中给上述属性赋值,触发地图坐标刷新
假设你已经有类似的请求逻辑,示例回调写法:
APICaller.shared.fetchVehicles { [weak self] result in guard let self = self else { return } switch result { case .success(let vehicles): // 如果返回的是数组,按需取你要展示的那台车辆,比如取第一台 self.targetVehicle = vehicles.first // 赋值完成后调用刷新地图的方法 self.updateMapRegion() case .failure(let error): print(error.localizedDescription) } }
- 第三步:封装地图区域刷新方法,替换原来的固定经纬度代码,注意对可选值做安全解包,避免空值崩溃
private func updateMapRegion() { // 安全解包车辆数据和经纬度属性 guard let vehicle = targetVehicle, let lat = vehicle.Latitude, let lon = vehicle.Longitude else { // 解包失败可以保留默认坐标,或者做异常提示 return } // 替换原来的固定经纬度 let targetLocation = CLLocation(latitude: lat, longitude: lon) let regionRadius: CLLocationDistance = 1000.0 let region = MKCoordinateRegion(center: targetLocation.coordinate, latitudinalMeters: regionRadius, longitudinalMeters: regionRadius) mapView.setRegion(region, animated: true) mapView.delegate = self }
注意事项
- 如果你的业务需要展示多台车辆标点,拿到
Vehicles数组后遍历生成MKAnnotation添加到mapView即可 - 不要对
Latitude、Longitude做强行解包(!),避免接口返回空值时触发崩溃
内容的提问来源于stack exchange,提问作者user17416997
相关产品推荐
相关产品推荐

