Swift: использование Integer в качестве поля в структуре - PullRequest
0 голосов
/ 11 февраля 2020

Я звоню в API в Swift и использую JSONDecoder. Вызов API возвращает категории и идентификаторы, проблема, с которой я сталкиваюсь, заключается в том, что он хранит подкатегории под ключом идентификатора основных категорий.

Возвращенные данные выглядят так:

categories = {
  data = {
    main = (
      {
        id = 39;
        name = Electronics;
      }
    )
    sub = {
      39 =
        (
          {
            id = 49;
            name = TV;
          }
        )
    }
  }
}

Проблема в том, что 39. В моей структуре не может быть let 39:[Category], иначе я получаю ошибку:

Ожидаемый паттен.

Есть ли обходной путь для этого?

1 Ответ

0 голосов
/ 12 февраля 2020

Вы не можете использовать 39 в качестве имени параметра, но вы можете использовать это

    let category_39: [Category]
    private enum CodingKeys : String, CodingKey {
        case category_39 = "39"
    }

Но я думаю, что эта структура будет сложной, если новая категория, добавленная со стороны сервера, не имеет предварительно определенного идентификатора категории. Я предлагаю использовать следующую модель

struct Model: Codable {
    let main: [Category]
    let sub: [String: [Category]]
}
struct Category: Codable {
    let id: Int
    let name: String
}

, а затем получить подкатегории по идентификатору категории

let subCategories = model.sub[String(id)] // String(id) --> "39"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...