Поведение субъекта с преобразованием - PullRequest
0 голосов
/ 20 февраля 2019

Есть ли способ вернуть преобразованный объект поведения?

class ViewModel {
    let username: BehaviorSubject<String>

    init() {
        // I want username to emit trimmed values...
        username = BehaviorSubject<String>(value: "")
            // ... but map returns an Observable<>, not BehaviorSubject
            .map { $0.trimmingCharacters(in: CharacterSet.whitespaces) 
    }
}

1 Ответ

0 голосов
/ 20 февраля 2019

Короткий ответ - нет, нет способа вернуть преобразованный объект поведения.

Сначала необходимо определить выход, на который вы хотите повлиять, а затем выяснить, какие входы влияют на него.map будет идти между ними.Например:

myTextField.rx.text.orEmpty
    .map { $0.trimmingCharacters(in: CharacterSet.whitespaces)
    .bind(to: username)
    .disposed(by: disposeBag)

Если вы хотите, чтобы имя пользователя было выводом, или

username.asObservable() // I'm not sure if the asObservable() is actually necessary at the moment. Check that.
    .map { $0.trimmingCharacters(in: CharacterSet.whitespaces)
    .bind(to: myLabel.rx.text)
    .disposed(by: disposeBag)

, если вы хотите, чтобы имя пользователя было вводом.

Чтобы создатьusername просто используйте let username = BehaviorSubject<String>()

...