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

Swift中创建结构体整合燃油数据数组并实现站点ID匹配查询

解决方案

1. 定义整合数据的结构体

先创建两个结构体,分别封装单种燃油信息和对应站点的完整燃油数据:

// 封装单种燃油的类型与价格
struct FuelGrade {
    let type: String
    let price: Double
}

// 封装单个站点的ID及其所有燃油信息
struct StationFuelInfo {
    let stationID: String
    let fuelGrades: [FuelGrade]
}

2. 替换原有独立数组

移除原来的三个分散数组,改用结构体数组存储数据:

var stationFuelInfos: [StationFuelInfo] = []

3. 修改API数据填充逻辑

在MapVC的API回调中,直接将接口返回的数据封装为StationFuelInfo对象并加入数组,从根源避免索引不匹配问题:

WalletService.shared.locateAndCheckinToNearestStore(toExplicitLocation: CLLocation(latitude: station.lat, longitude: station.long)) { storee, error in
    WalletService.shared.getSiteDetails { siteDetails, error in
        guard let fuelGrades = siteDetails?.fuelGrades else { return }
        
        // 转换API返回的燃油数据为自定义结构体数组
        let convertedFuelGrades = fuelGrades.compactMap { fuelGrade in
            guard let type = fuelGrade.fuelType, let price = fuelGrade.price else {
                return nil
            }
            return FuelGrade(type: type, price: price)
        }
        
        // 创建当前站点的燃油信息对象并加入数组
        let stationFuelInfo = StationFuelInfo(
            stationID: station.id,
            fuelGrades: convertedFuelGrades
        )
        self?.stationFuelInfos.append(stationFuelInfo)
    }
}

4. 根据站点ID匹配数据

用户选中站点后,直接通过selectedStation?.id在结构体数组中定位对应数据:

if let selectedStationID = selectedStation?.id {
    // 查找目标站点的燃油信息
    if let targetFuelInfo = stationFuelInfos.first(where: { $0.stationID == selectedStationID }) {
        // 提取该站点的所有燃油类型与价格
        let fuelTypes = targetFuelInfo.fuelGrades.map { $0.type }
        let fuelPrices = targetFuelInfo.fuelGrades.map { $0.price }
        
        // 此处可将数据传递至下一页面
        // 示例:nextVC.fuelTypes = fuelTypes; nextVC.fuelPrices = fuelPrices
    }
}

方案优势

原有三个独立数组存在索引错位风险:一个站点可能对应多种燃油类型,导致storeFuelGradesTypes和storeFuelGradesPrice的元素数量远多于storeFuelGradesID,无法通过ID直接关联数据。结构体数组将站点ID与对应燃油信息封装为整体,从根本上保证了数据的关联性,查找时无需依赖索引,直接通过ID匹配即可。

内容的提问来源于stack exchange,提问作者ZeroCooL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:37:03