我的视图控制器中有一些textfiled。并使用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的第一个映射返回一个数组,元素是元组(据我所知),第一个是controlEvent,第二个是int值。我不明白的是第二个地图功能。 Obs是contrlEvent类型。为什么obs.map {tag}返回一个可观察值。以及如何了解地图{obs,在obs.map {tag}}中标记? 非常感谢你!
答案 0 :(得分:0)
输出为:
obs.map{ tag }
代表
$0.rx.controlEvent(.editingDidBegin).map { $0.tag }
它将.editingDidBegin控制序列替换为该字段的标记值。
答案 1 :(得分:0)
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的Observable。