172 похожих чатов

Привет. Вопрос по Decodable Представьте struct A: Decodable, в котором 25

свойств, из них 24 штуки String и декодируются из коробки. А одно Bool, которое в JSON приходит в кавычках “false” и не декодируется. Как выйти из положения не переписывая целую простыню декодирований для всех 24 стрингов?
Может как-то можно переопределить decodeIfPresent для Bool? (У меня не получилось)

17 ответов

8 просмотров
bodich- Автор вопроса

Не понял ответ)

это String «false»

Nazhmeddin Babakhanov 
это String «false»

проста матчинг сделай == чему

bodich- Автор вопроса
Nazhmeddin Babakhanov 
проста матчинг сделай == чему

Где его сделать-то? Надо чтобы Decodable декодировался автоматом. Как обработать строку в бул я-то разберусь))

bodich
Где его сделать-то? Надо чтобы Decodable декодиров...

добавь Decodable get variable типо var boolVal { return «true» == valueFrom } кажется примерно так пишется

bodich- Автор вопроса
Nazhmeddin Babakhanov 
добавь Decodable get variable типо var boolVal {...

Понял, вычисляемое свойство. Это да, но хотелось прямо по красоте без лишнего)

bodich
Понял, вычисляемое свойство. Это да, но хотелось п...

if let value = try values.decodeIfPresent(String.self, forKey: .boolValue) { self.boolValue = «true» == valueFrom } else { self.boolValue = false} тогда так))

bodich- Автор вопроса
Nazhmeddin Babakhanov 
if let value = try values.decodeIfPresent(String.s...

Та это я понимаю, но это надо писать в init, а тогда надо все остальные 24 свойства просто так тоже руками декодировать. Вопрос именно как избежать ручной обработки всех остальных свойств.

bodich- Автор вопроса
Nazhmeddin Babakhanov 
и это можно

Что это и как? Не понял)

может отдельный тип с инитом из singleValueContainer сделать и у него boolValue?

bodich- Автор вопроса
Artëm Balashow
может отдельный тип с инитом из singleValueContain...

Если кому интересно, на стэковерфлоу мне классный варик предложили https://stackoverflow.com/questions/65981840/how-to-decode-single-unusual-property-among-many-decodable-swift/65982070#65982070

bodich
Если кому интересно, на стэковерфлоу мне классный ...

Спасибо :), мне со вчера интересно было....ранее (издревле) тру-вэй был, что есть «объект для сети», и объект для приложения который инициализируются «обьектом для сети» и в этом инициализаторе все преобразования и конвертации время в строки и тд, опять же позволит тестировать «json из сети» если ошибка в нём. Второй вариант более простой, реализовать init(from: decoder) и писать все 24 свойства, это в принципе норм, так как потом ещё какое-то поле тип поменяет, мало ли, или конвертация какая-то. Но так сразу не соображу чем вариант плох (если не нашёл минусов...значит они найдутся позже, в неподходящий момент :) ) И вот сейчас третий вариант с пропертиРапперами: и возможно со временем все 24 свойства будут обёрнуты в «попробуй как-нибудь распарить», вроде удобно, но опять же, надо подумать не о плюсах а возможных минусах

bodich- Автор вопроса
Sergey Sergey
Спасибо :), мне со вчера интересно было....ранее (...

Конкретно в моем случае, не парсятся не сами свойства конкретные, а 2 типа, Bool и Date (куча свойств на этих 2 типах). При этом Decodable моделей, которые вложены друг в друга, в общем свойств огромное кол-во. Это ответ Apple на запрос верификации рецепта AppStore. И как раз тут проще 2 врапера простых написать, чем увеличивать код моделей в 3 раза (не забываем enum), причем в разных моделях один и тот же Bool и Date. Короче будет месиво нечитаемое если писать вручную все init))

bodich
Конкретно в моем случае, не парсятся не сами свойс...

Понятно, у тебя выход из ситуации :) я скорее концептуально стал думать: а если, в будущих приложениях, с самого начала сделать все свойства вот так «обёрнутыми», типа как ДакТайпинг в процессе парсинга )). Как это повлияет...

bodich- Автор вопроса
Sergey Sergey
Понятно, у тебя выход из ситуации :) я скорее конц...

Ну если бы были все свойства такими, то через init проще)

bodich
Ну если бы были все свойства такими, то через init...

Да, более явно....наверное «обертки» в данном случае всё-таки чтобы выручить в какой-то момент.

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
а чем лучше всего сделать глобальный лок, если много нодов, до сотни? ну то есть мне надо, чтобы некоторые операции с объектом не происходили одновременно. перемещение между н...
Д. П.
15
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Hi guys, I'm looking for a good LLM course. Is there any course to learn LLMs in advanced? I'm aiming to use them in my apps, so a perfect course in my openion, is not only a ...
Taha
14
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Карта сайта