我可以在 swift Moya 中请求一个二维关联数组吗?

问题描述

成功请求了以下两种形式的数据。

    {
      "ride_fare": 1000,"km": 7
      ]
    } 
{
  "ride_fare": 1000,"km": 7,"options": [ 0,1,2]
}

但是,我不知道如何请求像下面这样的二维关联数组。 我如何申请?

{
  "ride_fare": 1000,"option_fares": [
    {
      "price": 200,"name": "立ち寄り","id": 1
    }
  ]
}

我写的代码

var options = [Any]()
for option in optionfares {
    let params = [
        "id" : option.id ?? 0,"name" : option.name ?? "","price" : option.price ?? 0
    ] as [String : Any]
    options.append(params)
}

let faresData = [
    "id" : driverOrder.id ?? 0,"km" : driverOrder.distance ?? 0,"option_fares" : options,"ride_fare" : driverOrder.ride_fare ?? 0
] as [String : Any]

解决方法

首先,create a struct 匹配您要请求的 json 格式。

struct Params: Codable {
    let rideFare,km: Int
    let optionFares: [OptionFare]

    enum CodingKeys: String,CodingKey {
        case rideFare = "ride_fare"
        case km
        case optionFares = "option_fares"
    }
}

struct OptionFare: Codable {
    let price: Int
    let name: String
    let id: Int
}

而且你必须在 Moya 的任务中创建一个请求参数。

import Moya

extension APITarget: TargetType {

   var task: Task {
       case .yourCaseName(let price,let name,let id,let rideFare,let km):
            
            let encoder: JSONEncoder = JSONEncoder()
            let optionFareData: [OptionFare] = []
            optionFareData.append(OptionFare(price,name,id))
            let paramsData = Params(rideFare,km,optionFareData)
            let jsonData: Data = try! encoder.encode(paramsData)
            
            return .requestData(jsonData)
        }


   }
}