В этой справочной статье рассказывается, как создать HTTP-запрос с помощью шаблона архитектуры SwiftUI и MVVM (Model View ViewModel).

Класс CountryNetwork

Нам нужно создать класс, соответствующий протоколу ObservableObject. Сопоставив наш класс с ObservableObject, изменения в классе будут автоматически отражены в нашем представлении. Создадим файл CountryNetwork.swift, в котором будем вызывать API.

Модель CountryAPIElements

Далее мы создадим модель CountryAPIElements. Таким образом, мы можем согласовать наши переменные с типом данных Country. Модель также позволит нам декодировать JSON, который мы получаем от API, в тип данных User.
Чтобы получить JSON с сервера, нам сначала понадобится API, в нашем случае Api Ninjas Country. . Как только мы получим ссылку на API, мы будем использовать POSTMAN, инструмент, который позволяет протестировать API Rest. В нашем случае мы будем использовать POSTMAN как для проверки того, выдает ли сервер какую-либо ошибку, так и для выполнения запросов GET для нашего файла JSON для создания нашей структуры.
Чтобы получить POSTMAN, вам необходимо сначала зарегистрироваться на https://www.postman.com/ и после этого можно переходить к загрузке.

Для ключа просто выберите GET и вставьте ссылку, указанную в документации API.
Теперь вам нужно вставить ключ заголовка, который вы также найдете в документации, и после регистрации вы получите ключ.

Как вы можете видеть на изображении выше, JSON представляет собой массив объектов. Каждый объект представляет страну и содержит множество пар "ключ-значение".
Вернувшись к нашему проекту, нам нужно создать структуру, содержащую все эти пары "ключ-значение". К счастью, я уже создал для вас модель CountryAPIElements ниже. Просто создайте новый файл CountryAPIElement.swift и вставьте следующий код:

Существует несколько онлайн-инструментов, позволяющих преобразовывать JSON в структуры. Например, Быстрый ввод.

Эта модель соответствует протоколам Идентифицируемый и Декодируемый. Идентифицируемый означает, что каждый элемент имеет уникальный идентификатор. Декодируемый означает, что его можно декодировать — например, мы можем преобразовать объект JSON в эту модель данных.

Переменная @Published

Вернувшись в CountriesNetwork, нам нужно создать переменную нации @Published внутри класса. Тип переменной будет массивом CountryAPIElements. Для начала мы инициализируем переменную пустым массивом.

Получить запрос

Теперь нам нужно создать нашу функцию getNation для получения стран из API. Создайте функцию внутри класса CountrisNetwork.

Теперь вы можете объявить переменную типа CountryNetwork для доступа к функции getNation для заполнения структуры, объявленной ранее.