Ho un controller di autorizzazione con 2 proprietà UITextField e 1 UIButton. Voglio associare la mia vista a ViewModel ma non so come farlo. Questo è il mio AuthorizatioVC.swift:Come associare rx_tap (UIButton) a 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?
}
}
E questo è il mio 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 così tanto! Ho avuto davvero difficoltà a cercare di capire come funziona e la tua risposta mi ha davvero aiutato. – Marina
Dovresti evitare di usare i soggetti quando puoi, e puoi evitarlo facilmente in questo caso. –
@DanielT Grazie per il tuo impegno! Hai perfettamente ragione, ho cambiato l'esempio nella mia risposta per usare il modo in cui è suggerito nel repository RxSwift. – joern