我正在阅读此博客,了解输入输出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
他实际上并没有在validateSubject
上访问tap
,但最终他创建了一些可访问的输入/输出层参见例如:
struct Input {
let name: AnyObserver<String>
let validate: AnyObserver<Void>
}
struct Output {
let greeting: Driver<String>
}
与内部私有层/逻辑通信(例如validateSubject
和nameSubject
)。
然后他通过name
和validate
传递输入中的所有信息,并期望通过greeting
从输出中返回信息。