Я создал быстрый клиент 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.
Что мне нужно сделать, чтобы декодировать пустой объект из какой-либо строки?