Когда дело доходит до обработки закодированной строки для Decodable
, на самом деле вам даже не нужно объявлять свойство как String
, просто просто объявите его как Data
.
Так что для вашегоСлучай, который вы должны сделать, это отредактировать encoded
как:
struct Result: Decodable {
var encoded: Data
}
таким образом:
let decoder = JSONDecoder()
let result = try! decoder.decode(Result.self, from: jsonData!)
let decodedString = String(data: result.encoded, encoding: String.Encoding.utf8)
print(decodedString ?? "") // decodedString
Имейте в виду, что это довольно похожий случай для обработки Даты для декодируемых данных. В качестве примера рассмотрим, что у нас есть следующие данные json:
let jsonData = "{ \"timestamp\": 1527765459 }".data(using: .utf8)
Очевидно, что вы не получите timestamp
как число и преобразуете его в объект Dateвместо этого вы бы объявили его как Date
:
struct Result: Decodable {
var timestamp: Date
}
таким образом:
let decoder = JSONDecoder()
// usually, you should edit decoding strategy for the date to get the expected result:
decoder.dateDecodingStrategy = .secondsSince1970
let result = try! decoder.decode(Result.self, from: jsonData!)
print(result.timestamp) // 2018-05-31 11:17:39 +0000