nastya_zholudeva
@nastya_zholudeva

Почему не работает запрос к API внутри метода prepare for segue?

Делаю страницу авторизации и нужно чтобы после того, как пользователь успешно залогинился произошел переход на следующую страницу. При этом также должен быть запрос, данных с ответа которого нужно передать на эту следующую страницу. Я пытаюсь это реализовать так.
На LoginViewController делаю запрос на регистрацию, on success вызываю
self.performSegue(withIdentifier: "sucsessLoginSegue", sender: self)
для перехода на следующую страницу и по клику на кнопку "Зарегистироваться" вызываю эту функцию.
Для задачи с передачей данных на следующую страницу использую prepare for segue внутри которого я и делаю запрос для получения данных, которые и нужно передать. Однако print("1111111") внутри этого метода срабатывает, а print("items111:", items) уже нет. Что я делаю не так?
func register() {
        let api = JsonPlaceholder()
        api.post(uri: "users/",  params: ["username" : login.text!, "email" : email.text!, "password" : password.text!], callback: { (items) in
            print("items login: ", items)
            self.performSegue(withIdentifier: "sucsessLoginSegue", sender: self)
        })
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let ParentVC = segue.destination as! ParentViewController
        print("1111111")
        let api = JsonPlaceholder()
        api.get(uri: "tabs/", params: [:], callback: { (items) in
            print("items111:", items)
            var menuItems = [String]()
            for menuItem in items {
                menuItems.append(menuItem.1["name"].stringValue)
            }
            
            ParentVC.menuItems = menuItems
        })
@IBAction func clickOnRegister(_ sender: UIButton) {
         print("click!")
        self.register()
    }
    }
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
doublench21
@doublench21 Куратор тега Swift
Ну потому-что Вы снова забываете про то, что это Асинхронный метод. Когда этот метод срабатывает, функция
prepare(for segue: UIStoryboardSegue, sender: Any?)
уже завершает свою работу. Вариантов два. Делать запрос, до вызова метода
self.performSegue(withIdentifier: "sucsessLoginSegue", sender: self)
и уже воспользоваться результатом вызова в
prepare(for segue: UIStoryboardSegue, sender: Any?)
. Либо делать запрос уже после перехода на новый VC.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы