Can I request a two-dimensional associative array in swift Moya?

213 Views Asked by At

The following two forms of data were successfully requested.

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

However, I don't know how to request a two-dimensional associative array like the one below. How can I request it?

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

The code that I wrote:

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]
1

There are 1 best solutions below

0
Hailey On

First, create a struct that matches the json format you want to request.

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
}

And you must create a request parameter in Moya's task.

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)
        }


   }
}