API иногда возвращает пустой словарь в JSON Data вместо обычного числа с плавающей запятой: как мне с этим справиться? (Свифт) - PullRequest
0 голосов
/ 10 июля 2020

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

Кажется, что это так. делать это, когда значение должно быть nil

Как мне с этим справиться? Есть ли способ, чтобы, если мне дали это пустое значение словаря, я мог бы просто проигнорировать его или вернуть ноль или даже 0?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 10 июля 2020

Если вы не можете изменить API (предпочтительный подход), вы можете использовать enum со связанными значениями, представляющими каждый тип результата.

Итак, для примера, давайте предположим, что вы получите следующие два типа результатов:

Случай успеха:

{ "value": 5.2 }

Случай отказа:

{ "value": {} }

Затем вы можете декодировать это с помощью перечисления, например :

enum Result: Decodable {
   case success(Float)
   case error
    
   enum CodingKeys: CodingKey { case value }
    
   init(from decoder: Decoder) throws {
      let container = try decoder.container(keyedBy: CodingKeys.self)
        
      if let value = try? container.decodeIfPresent(Float.self, forKey: .value) {
         self = .success(value)
      } else {
         self = .error
      }
   }
}

Затем вы можете декодировать и извлечь число:

let result = try JSONDecoder().decode(Result.self, from: json)

if case let .success(value) = result {
    print(value) // 5.2
}
...