RxSwift输入输出,私有主题,但在类外被触发

问题描述 投票:0回答:1

我正在阅读此博客,了解输入输出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

ios swift rx-swift kickstarter
1个回答
1
投票

他实际上并没有在validateSubject上访问tap,但最终他创建了一些可访问的输入/输出层参见例如:

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

struct Output {
   let greeting: Driver<String>
}

与内部私有层/逻辑通信(例如validateSubjectnameSubject)。

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

© www.soinside.com 2019 - 2024. All rights reserved.