У меня есть структура, соответствующая Decodable. Он имеет 50 свойств String и только один Bool. Этот bool поступает с сервера как строка false / true или иногда как целое число 0/1, поэтому не может быть декодирован из коробки. Как я могу сделать это декодирование, но не писать огромное количество ручного декодирования всех этих 50 свойств String? Может быть, как-то переопределить decodeIfPresent для Bool, но я не мог заставить его работать. Как я могу избежать создания init с декодированием всего и всего этого вручную и обрабатывать только один Bool? Если возможно, без вычисляемого свойства.
struct Response: Decodable {
var s1: String
var s2: String
var s3: String
//...........
var s50: String
var b1: Bool
var b2: Bool
}
Вот пример json:
{
"s1":"string"
"s2":"string"
"s3":"string"
//..........
"s50":"string"
"b1":"true"
"b2":"0"
}
Пробовал, но не работает (((
extension KeyedDecodingContainer { //Doesn't work, no execution
func decodeIfPresent(_ type: Bool.Type, forKey key: K) throws -> Bool {
return try! self.decodeIfPresent(Bool.self, forKey: key)
}
func decodeIfPresent(_ type: Bool.Type, forKey key: K) throws -> Bool? {
return try? self.decodeIfPresent(Bool.self, forKey: key)
}
}