BehaviorSubject 转换

BehaviorSubject with transformation

有没有办法 return 转换后的 BehaviorSubject?

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 { [=10=].trimmingCharacters(in: CharacterSet.whitespaces) 
    }
}

简短的回答是否定的,没有办法 return 转换后的 BehaviorSubject。

您必须首先定义要影响的输出,然后找出影响它的输入。 map 将介于两者之间。例如:

myTextField.rx.text.orEmpty
    .map { [=10=].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 { [=11=].trimmingCharacters(in: CharacterSet.whitespaces)
    .bind(to: myLabel.rx.text)
    .disposed(by: disposeBag)

如果您希望用户名作为输入。

要创建 username 只需使用 let username = BehaviorSubject<String>()