RxSwift 输入输出,私有主题但在 class 之外触发

RxSwift Input Output, private subject but being triggered outside the class

我正在阅读这篇关于输入输出 ViewModel 方法的博客: https://medium.com/blablacar-tech/rxswift-mvvm-66827b8b3f10

完整代码:https://gist.github.com/MartinMoizard

我只是想知道

let greeting = validateSubject
        .withLatestFrom(nameSubject)
        .map { name in
            return "Hello \(name)!"
        }
        .asDriver(onErrorJustReturn: ":-(")

https://gist.github.com/MartinMoizard/4d66528a9959cbbdefa6d50394d2bfb1

如果 validateSubject 在点击时是私有的,则被触发 https://gist.github.com/MartinMoizard/449be0d30920010210988f1773a2ca90

final class ButtonCell: UITableViewCell, SayHelloViewModelBindable {
    @IBOutlet weak var validateButton: UIButton!
    var disposeBag: DisposeBag?

    override func prepareForReuse() {
        super.prepareForReuse()
        disposeBag = nil
    }

    func bind(to viewModel: SayHelloViewModel) {
        let bag = DisposeBag()
        validateButton.rx
            .tap
            .bind(to: viewModel.input.validate)
            .disposed(by: bag)
        disposeBag = bag
    }
}

TIA

他并没有真正在 tap 上访问 validateSubject 但最终他创建了一些 可访问的 input/output 层 例如:

struct Input {
   let name: AnyObserver<String>
   let validate: AnyObserver<Void>
} 

struct Output {
   let greeting: Driver<String>
}

与内部私有通信layer/logic(如validateSubjectnameSubject)。

然后他通过 namevalidate 传递输入中的各种信息,并期望通过 greeting 从输出返回信息。