RxSwift à l'aide de bindTo pour la liaison de la Variable<String> UILabel pas de travail pour Swift 3.0 mise à jour
- Je utiliser RxSwift
pour lier mon viewmodel
à UILabel
et UITexfield
. UITextfield
ont pas de problèmes de conversion de Swift 3
, juste de remplacer rx_text
avec 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
, je suis en utilisant RxSwift
3.0.0-beta.1 et essayé en changeant simplement rx_text à rx.texte, mais il ne compile pas et affiche ce message d'erreur "Impossible de convertir une valeur de type 'AnyObserver<String?>' (aka 'AnyObserver<Optional<String>>') to expected argument type 'Variable<String>".
Personne ne sait pourquoi et comment faire ce travail? Merci.
OriginalL'auteur JinglesBunny | 2016-09-22
Vous devez vous connecter pour publier un commentaire.
UILabel
'srx.text
de la propriété est de typeAnyObserver<String?>
si vous avez besoin de faire correspondre la valeur d'une option de
ou en court:
Voir https://github.com/ReactiveX/RxSwift/issues/875 pour d'autres solutions.
Pour répondre à ma propre question, à partir d'essais, il semble que cela ne se désabonner lui-même et d'éviter une éventuelle collision.
Si vous supprimez le point de vue en le supprimant de la superview et le mettre à néant l'abonnement est toujours actif. En fait
bind
est équivalent àsubscribe
et renvoie un Jetable qui est ici ajouté à un DisposeBag. Lorsque le contrôleur est alors retiré de la DisposeBag nettoie l'abonnement. Il ne plante pas, parce que l'Observateur est de typeBinder
qui vérifie si le bindings objet est toujours disponible. Voir Le Classeur.swift dans RxCocoa.Vous avez utilisé pour être en mesure de se lier pour la vie de la réception de vue, via rx.désalloué. Savez-vous si cela est encore possible? J'ai cherché, mais trouver de la documentation d'être rares. Merci et pour votre précédente réponse.
Oh oui, n'est-ce pas pensé. Il est possible avec
.takeUntil(shiftLabel.rx.deallocated)
dans ce cas. Lorsque vous ajoutez un.debug()
à l'inscription, vous pouvez voir qu'il obtient éliminé lorsque l'avis a été supprimé.OriginalL'auteur marcusficner