J'utilise RxSwift
pour lier mon viewmodel
à UILabel
et UITexfield
. UITextfield
ceux n'ont aucun problème à se convertir en Swift 3
, il suffit de remplacer rx_text
par rx.text
travaillé.
Mais pas pour UILabel
. Sur Swift 2.2
, J'ai utilisé:
self.viewModel.shiftNameText.asObservable().bindTo(self.shiftLabel.rx_text).addDisposableTo(self.disposeBag)
Pour Swift 3
, J'utilise RxSwift
3.0.0-beta.1 et j'ai juste essayé de changer rx_text en rx.text, mais il ne compile pas et affiche cette erreur "Impossible de convertir la valeur de type 'AnyObserver<String?>' (aka 'AnyObserver<Optional<String>>') to expected argument type 'Variable<String>".
Est-ce que quelqu'un sait pourquoi et comment faire fonctionner cela? Merci.
UILabel
's rx.text
la propriété est de type AnyObserver<String?>
vous devez donc mapper la valeur à une option
self.viewModel.shiftNameText
.asObservable()
.map { text -> String? in
return Optional(text)
}
.bind(to:self.shiftLabel.rx.text)
.disposed(by:self.disposeBag)
ou en bref:
self.viewModel.shiftNameText
.asObservable()
.map { $0 }
.bind(to:self.shiftLabel.rx.text)
.disposed(by:self.disposeBag)
Voir https://github.com/ReactiveX/RxSwift/issues/875 pour d'autres solutions.