Swift Codable декодирует пустой объект из текста - PullRequest
0 голосов
/ 23 марта 2020

Я создал быстрый клиент REST API, который мне нужен, чтобы указать тип ответа как c для каждого конкретного запроса. При получении запросов он автоматически декодирует ответ в обобщенные c объекты типа ответа.

Однако не все API возвращают объект ответа. Например, мне не нужен объект ответа для запроса POST, чтобы создать что-то на сервере. В таком случае с сервера я возвращаю простой текст, такой как «Статья создана»

Для API, который не возвращает объект ответа, я устанавливаю класс, представляющий пустой ответ, как тип клиента API generi c тип ответа.

/// class representing API empty response
public class RequestEmptyResponse: Codable {
   // No fields written
}

// Response body from HTTP Status 201
"Article created"
public struct CodableSerializer<T: Codable>: DataSerializable {

    public typealias SerializingType = T

    public static func serialize(data: Data) -> T? {

        do {
            let jsonDecoder = JSONDecoder()
            jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase
            let serialized = try jsonDecoder.decode(SerializingType.self, from: data)
            return serialized

        } catch {
            return nil
        }
    }
}

Когда я декодирую такой ответ на симуляторе iOS с iOS ver 13, он успешно декодирует RequestEmptyResponse, но на моем физическом устройстве (iPhone7 с iOS 12.4.1), он не может декодировать и создать объект RequestEmptyResponse.

Что мне нужно сделать, чтобы декодировать пустой объект из какой-либо строки?

...