Параметр decoder.decode действительный дата iso8601 как ноль - PullRequest
1 голос
/ 31 октября 2019

В Swift у меня есть следующий код ...

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let articles = try decoder.decode(Articles.self, from: data)  

class Article: Codable {

    init(_ PartitionKey : String?, RowKey : String?,  PublishedDateGmt:Date?, Title:String?) {
        self.PartitionKey = PartitionKey
        self.RowKey = RowKey
        self.PublishedDateGmt = PublishedDateGmt
        self.Title = Title
    }

    enum CodingKeys: String, CodingKey {
        // include only those that you want to decode/encode
        case PartitionKey
        case PublishedDateGmt
        case Title
        case RowKey
    }


    let RowKey: String?
    let PartitionKey: String?
    let PublishedDateGmt: Date?
    let Title: String?

}

И это пример JSON.

{
         "PartitionKey": “test1”,
        "RowKey": “123”,
        "PublishedDateGmt": "2019-06-29T17:27:46Z",
        "Title": “Test Title”
    }

Все, кроме ОпубликованоDateGmt, сериализуется. Я не получаю никаких ошибок при сериализации, за исключением того, что это дает мне ноль.

Я даже попробовал код ниже, но преобразование даты не удается. (В приведенных ниже примерах я получаю ошибки преобразования, а не nil, являющийся конечным результатом свойства в объекте Article).

// let dateFormatter = DateFormatter()
        //dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"//2019-06-29T17:27:46Z
            //decoder.dateDecodingStrategy = .formatted(dateFormatter)

Все сериализуется правильно, за исключением поля даты ОпубликованныйDateGmt, которое сериализуется как nil.

Пример даты здесь из возвращенных данных json: 2019-06-29T17: 27: 46Z

Это должна быть действительная дата iso8601, верно?

Все остальное правильно конвертируется в объект Article, и ключи кодирования установлены правильно.

1 Ответ

0 голосов
/ 01 ноября 2019

Насколько я могу судить, это была ошибка в отладчике XCode. В моем коде нет ничего плохого.

При использовании окна быстрого просмотра / локальных значений значение для параметраDiveDateGmt всегда было равно нулю, что сводило меня с ума при попытке его отладки. значение, вы видите, что значение действительно там.

Смотрите скриншоты:

enter image description here

enter image description here

enter image description here

Если у кого-то есть какие-либо другие объяснения, которые я хотел бы знать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...