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(如validateSubject
和nameSubject
)。
然后他通过 name
和 validate
传递输入中的各种信息,并期望通过 greeting
从输出返回信息。
我正在阅读这篇关于输入输出 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(如validateSubject
和nameSubject
)。
然后他通过 name
和 validate
传递输入中的各种信息,并期望通过 greeting
从输出返回信息。