Присвоение результата Alamofire массиву - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь присвоить результат, полученный Alamofire, массиву и обнаружил проблему.

Я использую Stripe API для продуктов, он возвращает объект JSON с именем "data:", я пытаюсь назначить этот объект данных только тому массиву товаров, который у меня есть.

Вот мой код

var products: [Product] = []
let stripeProducts = "stripe-products-api"

func createArray() {
  let stripeAuthHeader: HTTPHeaders = []

  AF.request(stripeProducts, headers: stripeAuthHeader).responseJSON {
     switch response.result {
     case .failure(let error):
       print(error)
     case .success:
       self.products = response.data \\ trying to access the data object from the JSON data
       print(self.products)
     }
  }
}

JSON:


 "object": "list",
  "data": [
    {
      "id": "prod_123456",
      "object": "product",
      "active": true,
      "attributes": [

      ],
      "created": 1590423835,
      "description": "Test",
      "images": [
        ""
      ],
      "livemode": false,
      "metadata": {
        "address": "Test"
      },
      "name": "Blue Jeans",
      "statement_descriptor": null,
      "type": "service",
      "unit_label": null,
      "updated": 1590653248
    }
]

Спасибо за помощь.

1 Ответ

0 голосов
/ 28 мая 2020

У вас должна быть структура продуктов

  struct Datum: Decodable {
    let id, object: String
    let active: Bool
    let created: Int
    let datumDescription: String
    let images: [String]
    let livemode: Bool
    let metadata: Metadata
    let name: String
    let type: String
    let updated: Int

    enum CodingKeys: String, CodingKey {
        case id, object, active, created
        case datumDescription = "description"
        case images, livemode, metadata, name
        case type
        case updated
    }
}

// MARK: - Metadata
struct Metadata: Decodable {
    let address: String
}

Затем проанализируйте это как это

let products = try? newJSONDecoder().decode(Products.self, from: response.data)
...