У меня есть такая структура:
struct OrderLine: Codable{
let absUrl: String?
let restApiUrl : String?
let description : String?
let quantity : Int?
let subscription: Subs?
let total: Double?
}
struct Subs: Codable{
let quantity: Int?
let name: String?
}
и некоторые OrderLine
в ответе сервера
"subscription": {
"quantity": 6,
"name": "3 Months"
},
но иногда он имеет тип String
:
"subscription": "",
без subscription
все нормально работает, а вот с ошибкой
CodingKeys(stringValue: "subscription", intValue: nil)],
debugDescription: "Expected to decode Dictionary<String, Any>
but found a string/data instead.", underlyingError: nil)
поэтому мой вопрос - как я могу декодировать или в String?
со значением ""
, или в Subs?
без ошибок? p.s. если я декодирую только как String?
, то будет ошибка debugDescription: "Expected to decode String but found a dictionary instead.", underlyingError: nil)
subscription
иметь значениеnull
, когда оно не определено, вместо""
. Если у вас нет контроля над этим API, вам придется реализовать свой собственныйinit(from: Decoder)
(вместо того, чтобы полагаться на стандартный, синтезированный компилятором), в котором вы выполняете проверку типа и обрабатываете этот случай. - person Alexander   schedule 07.01.2019String
дляsubscription
? Или он возвращает пустую строку только в случае отсутствия значенияsubscription
? - person Dávid Pásztor   schedule 07.01.2019let subscription: Subs?
иlet subscription: String?
- person canister_exister   schedule 07.01.2019