swift - executeSegue не работает в RxSwift Observable подписаться - PullRequest
0 голосов
/ 03 июня 2018

У меня есть следующий код:

loginViewModel.facebookLogin
.asObservable()
subscribe() { [unowned self] facebookLogin in
     if let isLoggedIn = facebookLogin.element?.isLoggedIn {
         if isLoggedIn {
              elf.performSegue(withIdentifier: "toRestaurantSelect", sender: self)
              }
      }

     if let didLoginFail = facebookLogin.element?.didLoginFail {
         self.errorLabel.isHidden = !didLoginFail
     }
  }
.disposed(by: disposeBag)

FacebookLogin - это переменная, которая обновляется при входе пользователя в систему. Однако executeSegue не вызывается (условие истинно).Как ни странно, если я включаю медленную анимацию в эмуляторе, то переход выполняется.Когда медленные анимации отключены, переход не выполняется (логин Facebook работает).Любая помощь приветствуется.Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Выполните наблюдение с помощью главного планировщика:

loginViewModel.facebookLogin
.asObservable()

// Switch to the main scheduler
.observeOn(MainScheduler.instance)


subscribe() { [unowned self] facebookLogin in
     if let isLoggedIn = facebookLogin.element?.isLoggedIn {
         if isLoggedIn {
              elf.performSegue(withIdentifier: "toRestaurantSelect", sender: self)
              }
      }

     if let didLoginFail = facebookLogin.element?.didLoginFail {
         self.errorLabel.isHidden = !didLoginFail
     }
  }
.disposed(by: disposeBag)
0 голосов
/ 03 июня 2018

я думаю, вы должны использовать основной поток, чтобы он работал

    loginViewModel.facebookLogin
        .asObservable()
        .subscribe() { [unowned self] facebookLogin in
            if let isLoggedIn = facebookLogin.element?.isLoggedIn {
                if isLoggedIn {


                    DispatchQueue.main.async {
                        self.performSegue(withIdentifier: "toRestaurantSelect", sender: self)

                    }



                }
            }

            if let didLoginFail = facebookLogin.element?.didLoginFail {
                self.errorLabel.isHidden = !didLoginFail
            }
        }
        .disposed(by: disposeBag)
...