Ich habe Autorisierungscontroller mit 2 UITextField-Eigenschaften und 1 UIButton. Ich möchte meine Ansicht an ViewModel binden, weiß aber nicht, wie ich es machen soll. Das ist mein AuthorizatioVC.swift:Wie bindet man rx_tap (UIButton) an ViewModel?
class AuthorizationViewController: UIViewController {
let disposeBag = DisposeBag()
@IBOutlet weak var passwordTxtField: UITextField!
@IBOutlet weak var loginTxtField: UITextField!
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
addBindsToViewModel()
}
func addBindsToViewModel(){
let authModel = AuthorizationViewModel(authClient: AuthClient())
authModel.login.asObservable().bindTo(passwordTxtField.rx_text).addDisposableTo(self.disposeBag)
authModel.password.asObservable().bindTo(loginTxtField.rx_text).addDisposableTo(self.disposeBag)
//HOW TO BIND button.rx_tap here?
}
}
Und das ist mein AuthorizationViewModel.swift:
final class AuthorizationViewModel{
private let disposeBag = DisposeBag()
//input
//HOW TO DEFINE THE PROPERTY WHICH WILL BE BINDED TO RX_TAP FROM THE BUTTON IN VIEW???
let authEvent = ???
let login = Variable<String>("")
let password = Variable<String>("")
//output
private let authModel: Observable<Auth>
init(authClient: AuthClient){
let authModel = authEvent.asObservable()
.flatMap({ (v) -> Observable<Auth> in
return authClient.authObservable(String(self.login.value), mergedHash: String(self.password.value))
.map({ (authResponse) -> Auth in
return self.convertAuthResponseToAuthModel(authResponse)
})
})
}
func convertAuthResponseToAuthModel(authResponse: AuthResponse) -> Auth{
var authModel = Auth()
authModel.token = authResponse.token
return authModel
}
}
Thank u so much! Es hat mir wirklich schwer gefallen, herauszufinden, wie es funktioniert und deine Antwort hat mir wirklich geholfen. – Marina
Sie sollten es vermeiden, Themen zu verwenden, wenn Sie können, und Sie können es in diesem Fall leicht vermeiden. –
@DanielT Vielen Dank für Sie comment! Sie haben völlig Recht, ich habe das Beispiel in meiner Antwort so geändert, dass es wie im RxSwift-Repo vorgeschlagen wird. – joern