RxSwift干货

30天学RxSwift-ObserverType,AnyObse

2016-04-24  本文已影响654人  Linqingmo

30天学RxSwift的github地址 

在RxSwift中有一个ObserverType协议。实现ObserverType协议的是观察者对象,用于观察Observable发出的信号。对于观察到的信号有个处理方法func on(event: Event)。

可以直接用来使用的实现ObserverType的对象就是AnyObserver。订阅Observable的方式就是subscribe。

在RxCocoa中可以看到UILabel的rx_text属性就是AnyObserver<String>类型的。回看上一节提到的问题,当点击按扭时让UILabel显示字符串。上一节说到可以在subscribeNext中赋值,但是这个显然不够Rx。这里给出更加优雅的方式。

button.rx_tap

.map { _ in "Test" }

.bindTo(label.rx_text)

这里的map是将button点击的信号内容从Void转换成"Text",然后直接将值绑定在label上。这里的bindTo和subscribe实现的是等价的,但依RxCocoa中所说的,bindTo的内在实现更好,并且bindTo这个名称也很直观,所以当引入了RxCocoa这个framework后一般我都是用bindTo来实现UI的订阅。

这样或许还看不出来优雅在哪里,那再举一个栗子。

本节还有个概念没讲到,那就是ControlProperty,ControlProperty是一个实现ControlPropertyType的对象ControlPropertyType是继承ObservableType, ObserverType协议的协议。因此我们可以将ControlProperty的变量当作Observable来使用。

textField.rx_text

.bindTo(label.rx_text)

这里将textField的值与label绑定在一起了,这样当textField的输入改变时,label就会实时响应。再也不需要设置delegate实现delegate方法了,感觉世界一下子美好了。

上一篇下一篇

猜你喜欢

热点阅读