Как передать данные в замыкании в другую сцену - PullRequest
0 голосов
/ 26 марта 2020

Это мое первое приложение в Swift. Я использую Alamofire для моего HTTP-запроса. Исходя из Android, я знаю, что можно привязать сериализованный объект к действию navcontroller при переходе от одного экрана к другому.

Я хочу иметь возможность выполнить переход после подписки viewmodel и прикрепить полученный токен к переходу, как я буду использовать его для проверки на следующем экране.

Я пытался didSet но безрезультатно.

Как я могу сделать это быстро.


    //MARK: Register user
    @IBAction func registerUser(_ sender: Any) {

        let fullName = firstNameTF.text! + " " + lastNameTF.text!
        let email = emailTF.text
        let password = passwordTF.text
        let phone = phoneNumberTF.text
        let country = countryDropDown.text

        let user = User(name: fullName, email: email, password: password, country: country, phone: phone, token: nil)

        var tk = ""{
            didSet{
                token = tk
            }
        }
      authViewModel.registerUser(user: user).subscribe(onNext: { (AuthResponse) in
            print("messaage \(String(describing: AuthResponse.message))")
            self.tokens = AuthResponse.token
            self.performSegue(withIdentifier: "gotoVerification", sender: self)
        }, onError: { (Error) in
            print("Error: \(Error.localizedDescription)")
        }, onCompleted: nil) {

        }.disposed(by: disposeBag)

        print("token \(token)")
//        AF.request(url, method: .post, parameters: user, encoder: JSONParameterEncoder.default).responseDecodable(of:AuthResponse.self){response in
//
//            response.map { (AuthResponse) in
//                print("messaage \(String(describing: AuthResponse.message))")
//            }
//
//            print("user: \(user)")
//            print("response \(String(describing: response))")
//        }
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let vc = segue.destination as? UserVerification{
//
            vc.tokens = token
            print("token \(token)")
        }
    }

1 Ответ

1 голос
/ 26 марта 2020

Вы можете передать токен как отправитель:

self.performSegue(withIdentifier: "gotoVerification", sender: AuthResponse.token)

Затем:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? UserVerification, let token = sender as? String {
        vc.tokens = token
        print("token \(token)")
    }
}
...