Я изо всех сил пытаюсь обновить этот объект JSON для определенного номера телефона.
Он не должен быть объектом JSON, когда вы его обновляете. Думайте о JSON как о формате для передачи данных. После передачи вы должны проанализировать его во что-то, с чем вы можете работать, например, в массив словарей или что-то еще. Если вы это сделали, то вы можете задать следующие c более конкретные вопросы:
- Как мне найти конкретную c запись в массиве?
- Как можно Я изменяю поля структуры?
- Как я могу заменить одну запись в массиве другой?
Посмотрев определения ваших структур, я думаю, что проблема в вас ' Возможно, это связано с тем, как вы их объявили:
public struct Phone: Decodable {
public let type: PhoneType?
public let number: String?
}
Поскольку вы использовали let
для объявления type
и number
, эти поля не могут быть изменены после инициализации. Если вы хотите, чтобы поля структуры Phone
можно было изменять, вам нужно объявить их с помощью var
вместо let
.
То же самое верно и для вашей Contact
структуры:
public struct Contact: Decodable {
public let phone_numbers: [Phone]?
}
Вы объявили phone_numbers
как неизменяемый массив, потому что вы использовали let
вместо var
. Если вы хотите иметь возможность добавлять, удалять или изменять массив в phone_numbers
, вам нужно вместо этого использовать var
.
Объявления структуры, которые у вас есть прямо сейчас, отлично подходят для чтения данных из JSON, потому что все компоненты данных JSON построены с использованием значений из JSON. Но опять же, вам нужно сделать эти структуры изменяемыми, переключившись на объявления var
, если вы хотите иметь возможность вносить изменения.