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

如何将API返回的MBFuelGrades数组中fuelType与price存入独立数组?

问题:拆分数组元素到两个独立数组

我在存储数组信息时遇到疑问,我的API调用代码如下:

WalletService.shared.getSiteDetails { siteDetails, error in
            
}

siteDetails会返回解析后的JSON数据,其中包含的一项数据为:

public let fuelGrades: [MBFuelGrades]?

MBFuelGrades的结构如下:

public struct MBFuelGrades: Codable {
    public let fuelType: String?
    public let price: Double?
    public let priceTier: String?
}

API响应后,打印得到的fuelGrades数组可能包含多个元素,示例如下:

po siteDetails?.fuelGrades
▿ Optional<Array<MBFuelGrades>>
  ▿ some : 1 element
    ▿ 0 : MBFuelGrades
      ▿ fuelType : Optional<String>
        - some : "REGULAR"
      ▿ price : Optional<Double>
        - some : 1.339
      ▿ priceTier : Optional<String>
        - some : "CREDIT"

我想要将其中的fuelType和price分别存入以下两个独立数组中:

var fuelGradesTypes: [String] = [""]
var fuelGradesPrice: [Double] = [0.0]

请问该如何实现将对应元素存入这两个数组中?


解决方案

你可以在API回调闭包中,先对可选的fuelGrades数组解包,再提取目标字段。需要注意处理fuelType和price自身的可选性,避免存入空值。另外你初始化的数组带有默认值,可根据需求选择清空或保留:

方式一:手动遍历处理

WalletService.shared.getSiteDetails { siteDetails, error in
    // 清空初始默认值(不需要保留则执行)
    self.fuelGradesTypes.removeAll()
    self.fuelGradesPrice.removeAll()
    
    // 解包可选数组,为空则直接返回
    guard let fuelGrades = siteDetails?.fuelGrades else {
        return
    }
    
    // 遍历数组提取非空字段
    for grade in fuelGrades {
        if let type = grade.fuelType {
            self.fuelGradesTypes.append(type)
        }
        if let price = grade.price {
            self.fuelGradesPrice.append(price)
        }
    }
}

方式二:使用compactMap简化代码

compactMap会自动过滤空值,直接生成非可选的元素数组,写法更简洁:

WalletService.shared.getSiteDetails { siteDetails, error in
    // 解包数组后直接赋值
    guard let fuelGrades = siteDetails?.fuelGrades else {
        return
    }
    
    // 替换原有数组
    self.fuelGradesTypes = fuelGrades.compactMap { $0.fuelType }
    self.fuelGradesPrice = fuelGrades.compactMap { $0.price }
    
    // 如果需要保留初始默认值,改用append添加
    // self.fuelGradesTypes.append(contentsOf: fuelGrades.compactMap { $0.fuelType })
    // self.fuelGradesPrice.append(contentsOf: fuelGrades.compactMap { $0.price })
}

注意点

  • 必须先对siteDetails?.fuelGrades解包,否则无法遍历数组;
  • compactMap会自动剔除nil值,确保最终数组里的元素都是非空的;
  • 若初始数组的默认值([""]和[0.0])需要保留,使用append(contentsOf:)替代直接赋值即可。

内容的提问来源于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 18:30:23