Как получить доступ к различным случаям в перечислимом Codable? - PullRequest
2 голосов
/ 07 мая 2019

У меня есть ответ JSON, и я преобразовал его в Codable классы с https://app.quicktype.io

Я получил класс со всеми структурами, и есть один особый случай,

enum Code: String, Codable {
    case adlt = "ADLT"
    case chld = "CHLD"
    case empty = ""
    case inft = "INFT"
    case rq = "RQ"
    case usd = "USD"
}

иэтот enum-код входит в 'passengerTypeQuantity (JSON дает ниже)


{
  "passengerTypeQuantity": {
    "passengerType": {
      "code": "ADLT"
    },
    "quantity": 2,
    "hasStrecher": false
  },
  "pricingInfo": {
    "baseFare": {
      "amount": {
        "currency": {
          "code": "USD"
        },
        "value": 60
      }
    },
    "fees": {
      "totalAmount": {
        "currency": {
          "code": "USD"
        },
        "value": 0
      }
    },
    "totalFare": {
      "amount": {
        "accountingSign": "ADC",
        "currency": {
          "code": "USD"
        },
        "value": 87
      }
    },
    "fareConstruction": "",
    "passengerTypeCode": "ADLT",
    "surcharges": {
      "totalAmount": {
        "currency": {
          "code": "USD"
        },
        "value": 24
      },
      "surchargeList": [
        {
          "surchargeAmount": {
            "currency": {
              "code": "USD"
            },
            "value": 24
          },
          "surchargeCode": "YQ",
          "surchargeType": "S",
          "paid": false
        }
      ]
    },
    "taxes": {
      "taxList": [
        {
          "paid": false,
          "taxAmount": {
            "currency": {
              "code": "USD"
            },
            "value": 1
          },
          "taxCode": "AF",
          "taxType": "T"
        },
        {
          "paid": false,
          "taxAmount": {
            "currency": {
              "code": "USD"
            },
            "value": 2
          },
          "taxCode": "M5",
          "taxType": "T"
        }
      ],
      "totalAmount": {
        "currency": {
          "code": "USD"
        },
        "value": 3
      }
    },
    "discountApplied": false,
    "fareBaggageAllowance": 0
  },
  "fareInfoList": [
    {
      "cabinClassCode": "Y",
      "fareReferenceCode": "x",
      "flightSegmentSequence": 1,
      "fareReferenceName": "x",
      "fareGroupName": "x",
      "resBookDesigCode": "S",
      "fareReferenceID": "x"
    }
  ]
}

Обычно через Codable я могу получить доступ к другим частям с помощью

root.availabilityResultList.first?.availabilityRouteList.first?.availabilityByDateList.first?.originDestinationOptionList.first?.fareComponentGroupList.first?.fareComponentList?.first?.passengerFareInfoList.first?.passengerTypeQuantity.passengerType

Это структура PassengerFareInfoList.

struct PassengerFareInfoList: Codable {
    let passengerTypeQuantity: PassengerTypeQuantity
    let pricingInfo: PricingInfo
    let fareInfoList: [FareInfoList]
}

Это структура passengerTypeQuantity.

struct PassengerTypeQuantity: Codable {
    let passengerType: Currency
    let quantity: Int
    let hasStrecher: Bool
}

Это структура валюты

struct Currency: Codable {
    let code: Code
}

и из кода происходит Enum (упомянутый выше)

enum Code: String, Codable {
    case adlt = "ADLT"
    case chld = "CHLD"
    case empty = ""
    case inft = "INFT"
    case rq = "RQ"
    case usd = "USD"
}

Вопрос: Как я могу проверить случай, затем вернуться к информации о ценах и получить цену для случая ADLT?а затем для случая CHLD ... и т. д.

...