Как проверить, является ли кодируемое значение ответа пустым или нет? - PullRequest
0 голосов
/ 28 марта 2020

Я новичок в быстрой и кодируемой тоже. У меня ниже кодируемый. Я получаю весь ответ API в "RecentResult". Я хочу проверить "данные" пусто или нет. Как это проверить?

struct RecentResult: Codable 
    {
        let input: Input
        let commandResult: CommandResultClass
    }

    struct CommandResultClass: Codable {
        let success: Int
        let message: String
        let data: DataClass
    }

    struct DataClass: Codable {
        let recentCount: String

        enum CodingKeys: String, CodingKey {
            case recentCount = "RecentCount"
         }
    }

Для декодирования я использую эту строку, но не понимаю, как проверить, что «данные» не заполнены.

let strResponseData = try JSONDecoder().decode(RecentResult.self, from: data!)

1 Ответ

2 голосов
/ 28 марта 2020

Общий совет, если у вас есть что-то вроде необязательного ...

struct example: Decodable {
  let name: String
  let nickname: String
  let tag: String
}

эти три ДОЛЖНЫ быть, они не могут быть "ноль", они не могут отсутствовать в JSON .

Так что, если "псевдоним" просто отсутствует в json, он просто не будет анализироваться.

С другой стороны. Если вы сделаете это, обратите внимание на вопросительный знак:

struct example: Decodable {
  let name: String
  let nickname: String?
  let tag: String
}

, тогда поле .nickname может фактически быть nil

Итак, вы можете сказать что-то вроде

if blah.nickname == nil { print("no nickname in the json!") }

Вы можете сказать буквальный ответ на ваш вопрос «Как проверить, пусто ли поле XYZ», если «strResponseData.xyz == nil» ...

Но вы должны указать парсеру, что в json это может быть либо ноль (ie, json выглядит так ... "nickname": nil), либо просто отсутствует в json (просто нет поле "псевдоним" в json).

То, как вы делаете это с "?".

...