代码之家  ›  专栏  ›  技术社区  ›  alekop

行为主体与转化

  •  0
  • alekop  · 技术社区  · 6 年前

    是否有方法返回已转换的行为主题?

    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) 
        }
    }
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   Daniel T.    6 年前

    简而言之,答案是不,没有办法返回一个已转换的行为主题。

    您必须首先定义要影响的输出,然后确定哪些输入会影响它。这个 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>()