Próbuję zbudować obserwowalny, który będzie wyjściowy wartość na podstawie wartości zmiennej.RxSwift Utwórz obserwowalne na podstawie zmiennej
Coś takiego:
let fullName = Variable<String>("")
let isFullNameOKObs: Observable<Bool>
isFullNameOKObs = fullName
.asObservable()
.map { (val) -> Bool in
// here business code to determine if the fullName is 'OK'
let ok = val.characters.count >= 3
return ok
}
Niestety blok na mapie func nigdy nie nazywa!
Powodem tego jest to, że:
- FullName zmienna jest oprawiony w UITextField z operatorem dwukierunkowego < ->, jak określono w przykładzie RxSwift.
- Obserwowany obiekt isFullNameOKObs będzie obserwowany pod kątem ukrywania lub wyświetlania przycisku przesyłania mojego kontrolera ViewController.
Każda pomoc zostanie bardzo doceniona.
Dzięki
Model
class Model {
let fullName = Variable<String>("")
let isFullNameOKObs: Observable<Bool>
let disposeBag = DisposeBag()
init(){
isFullNameOKObs = fullName
.asObservable()
.debug("isFullNameOKObs")
.map { (val) -> Bool in
let ok = val.characters.count >= 3
return ok
}
.debug("isFullNameOKObs")
isRegFormOKObs = Observable.combineLatest(
isFullNameOKObs,
is...OK,
...) { $0 && $1 && ... }
isRegFormOKObs
.debug("isRegFormOKObs")
.asObservable()
.subscribe { (event) in
// update the OK button
}
// removing this disposedBy resolved the problem
//.disposed(by: DisposeBag())
}
}
ViewController:
func bindModel() -> Void {
_ = txFullName.rx.textInput <-> model!.fullName
......
}
Rozwiązane ale nie rozumiem, jak to zrobić. Używam tego samego wzorca dla każdego pola tekstowego formularza: obserwowalny o nazwie isMyTextFieldOK, który oblicza niektóre reguły biznesowe. Ostateczna obserwowalna, która jest połączeniem najlepszych ze wszystkich obserwowalnych MytTextFieldOK. Dołączyłem ostatnio wywołanie (przez: disposeBag) tego ostatniego obserwowalnego. Usunięcie go rozwiązało wszystko. Ale nie wiem dlaczego. :-( – t4ncr3d3