1
私のViewModelrxSwiftボタンを押しオブザーバー問題
init(login: Observable<String>, password: Observable<String>, buttonPress: Observable<Void>) {
let userInputs = Observable.combineLatest(login, password) { (login, password) -> (String, String) in
return (login, password)
}
let callFromPress = buttonPress
.withLatestFrom(userInputs)
.map { (login, password) in
self.makeLoginRequest(userLogin: login, loginPassword: password, loginSecret: self.loginSecret, deviceToken: self.deviceToken)
}
}
にrxSwiftのためのオブザーバーの取扱いを設定INITを持っている私は、ボタンをタップするとしかし、何も起こりません。それはVCに縛られています:
buttonPress: self.loginView.loginButton.rx.tap.asObservable()
エラーが発生しても何もトリガーしない理由は何ですか?
更新:
init(login: Observable<String>, password: Observable<String>, buttonPress: Observable<Void>) {
let userInputs = Observable.combineLatest(login, password) { (login, password) -> (String, String) in
return (login, password)
}
buttonPress.subscribe(onNext: { each in
print(each)
.withLatestFrom(userInputs)
.map { (login, password) in
self.makeLoginRequest(userLogin: login, loginPassword: password, loginSecret: self.loginSecret, deviceToken: self.deviceToken)
}
}).disposed(by: self.disposeBag)
}
エラー:
Extraneous argument label 'onNext:' in call
アップデート2:
init(login: Observable<String>, password: Observable<String>) {
// each time the login and password change, returns login and string value
didTapLoginButton = { [weak self] _ in
// allows for strong self reference
guard let `self` = self else { return }
Observable.combineLatest(login, password) { (login, password) in
//
}
.subscribe(onNext: { response in
self.makeLoginRequest(userLogin: login, loginPassword: password, loginSecret: self.loginSecret, deviceToken: self.deviceToken)
// do something with your response
})
.disposed(by: self.disposeBag)
}
}
おかげで、私は今、ボタンを押すのコードでOPを更新しますが、上のエラーをスローします処分バッグ:表現型 '()'は文脈がなくてもあいまいです...さらなる問題があると思いますか? – jackdm
私はあなたのユースケースで行うより詳細な私の答えを編集しました。 – XFreire
LoginRequest関数の結果タイプ '(String、String)'を閉じて ''() 'の値を変換できません。 – jackdm