我的视图控制器中有一些文本文件。并使用rx-swift观察.editingDidBegin事件。
我想判断哪个文本字段发送事件。
let tags = txtFieldArray.map{($0.rx.controlEvent(.editingDidBegin), $0.tag)}
.map{obs, tag in obs.map{tag}}
let value = Observable.merge(tags)
value.bind {[weak self] (tags) in
guard let strongSelf = self else { return }
if let view = strongSelf.ipEnteryView.viewWithTag(tags) as? UITextField {
strongSelf.viewMode.changeTextFiledBottomColor(view, true)
}
}.disposed(by: disposedBag)txtFieldArray的第一个map返回一个数组,元素是元组(据我所知),第一个是controlEvent,第二个是int值。我不理解的是第二个map函数。Obs为contrlEvent类型。为什么obs.map{tag}返回一个observable。如何理解obs.map{ tag }}中的map{obs,tag}?非常感谢!
发布于 2019-05-28 19:06:41
输出为:
obs.map{ tag },它表示
$0.rx.controlEvent(.editingDidBegin).map { $0.tag }它将.editingDidBegin控制序列替换为该字段的标记值。
发布于 2019-05-28 19:23:38
obs.map { tag }返回一个Observable,因为函数的签名是:
ObservableType.map<Result>(_ transform: @escaping (Self.Element) throws -> Result) -> RxSwift.Observable<Result>
由于map返回一个Observable,因此ops.map { tag }返回一个Observable。
.map{obs, tag in obs.map{tag}}获取(ControlEvent<()>, Int)数组,遍历每个元素并将其转换为Observable<Int>。
map只是一个函数,用于转换调用它的函数子类型。因此,第一个映射将X的数组转换为Y的数组,第二个映射将X的ObservableType转换为Y的可观测值。
https://stackoverflow.com/questions/56340660
复制相似问题