Как передавать сразу несколько значений с функции одного класса в другой с помощью [weak self] (Swift) Json Api

Я новичок и пытаюсь научиться, хочу попросить у вас совет, решение. Я создал функцию в отдельном классе для Парсинга Json Api, хочу передать ее через @escaping (String)->(). Получается сделать это только если я беру одно какое то значение, например: Город. Но мне также нужно и остальные перенести в другой класс, регион, температуру, страну и так далее. Возможно я просто не знаю тот способ, который знаете вы, заранее благодарю за помощь!

Скриншоты снизу

введите сюда описание изображения

введите сюда описание изображения

Вот как я попробовал сделать: func SendRequest(completion2:@escaping (String)->(),completion: @escaping (String)->()) { и completion2(RegionLabel ?? "")

Так как я хочу вывести больше полученных результатов, а получается выводить только один без ошибок. Как выводить больше?

введите сюда описание изображения

Но сразу тут же image3 введите сюда описание изображения


Ответы (1 шт):

Автор решения: Pavel Lazarev

Здесь в замыкании вам нужно передать свою структуру NameRegionCountry

func sendRequest(completion: (NameRegionCountry) -> ()) {
    ...
    let task = NameRegionCountry()
    if let name = location["name"] {
        task.name = name
    }
    if let region = location["region"] {
        task.region = region
    }
    if let country = location["country"] {
        task.country = country
    }
    completion(task)
}

ManagerApi.shared.sendRequest { [weak self] data in
    self?.nameLabel.text = data.name
    self?.countryLabel.text = data.text
    self?.regionLabel.text = data.region
}

Не прошенные советы:

  1. Имя completion - означает завершение работы функции и должна один раз, после вызова функции sendRequest
  2. Так как в Swift принят cameCase, то имена функции и переменных нужно писать с маленькой буквы, а имена классов, структур и протоколов с большой :)

Удачного изучания!

→ Ссылка