//Observable序列(每隔1秒钟发出一个索引数) let scheduleObservable = Observable<Int>.interval(1, scheduler: MainScheduler.instance) let blinderObserval:Binder<String> = Binder(label){view,text in view.text = text } scheduleObservable .map{"当前索引\($0)"} .bind(to: blinderObserval) .disposed(by: disposeBag)
//有时咱们想让 UI 控件建立出来后默认就有一些观察者,而没必要每次都为它们单独去建立观察者。
//好比咱们想要让全部的 UIlabel 都有个 fontSize 可绑定属性,它会根据事件值自动改变标签的字体大小。
//这里咱们经过对 UILabel 进行扩展,增长了一个 fontSize 可绑定属性。 extension UILabel{ public var fontSize:Binder<CGFloat>{ return Binder(self){label,fontSize in label.font = UIFont.systemFont(ofSize: fontSize) } } }
//经过对 Reactive 类进行扩展
extension Reactive where Base:UILabel{ public var fontSize:Binder<CGFloat>{ return Binder(self.base){label,fontSize in label.font = UIFont.systemFont(ofSize: fontSize) } } }
//Observable序列(每隔1秒钟发出一个索引数) let scheduleObservable = Observable<Int>.interval(1, scheduler: MainScheduler.instance) /* 有时咱们想让 UI 控件建立出来后默认就有一些观察者,而没必要每次都为它们单独去建立观察者。 好比咱们想要让全部的 UIlabel 都有个 fontSize 可绑定属性,它会根据事件值自动改变标签的字体大小。 */ scheduleObservable .map{ CGFloat($0) } .bind(to: label.fontSize) .disposed(by:disposeBag) scheduleObservable.map{CGFloat($0)} .bind(to: label.rx.fontSize) .disposed(by: disposeBag)
override func viewDidLoad() { super.viewDidLoad() //Observable序列(每隔1秒钟发出一个索引数) let scheduleObservable = Observable<Int>.interval(1, scheduler: MainScheduler.instance) /* //其实 RxSwift 已经为咱们提供许多经常使用的可绑定属性。好比 UILabel 就有 text 和 attributedText 这两个可绑定属性。 import RxSwift import UIKit extension Reactive where Base: UILabel { /// Bindable sink for `text` property. public var text: Binder<String?> { return Binder(self.base) { label, text in label.text = text } } /// Bindable sink for `attributedText` property. public var attributedText: Binder<NSAttributedString?> { return Binder(self.base) { label, text in label.attributedText = text } } } */ //RxSwift 自带的可绑定属性(UI 观察者) scheduleObservable .map{"当前索引\($0)"} .bind(to: label.rx.text) .disposed(by: disposeBag) scheduleObservable .map {$0 % 2 == 0} .bind(to: mbutton.rx.isEnabled) .disposed(by: disposeBag) }
//其实 RxCocoa 在对许多 UI 控件进行扩展时,就利用 Binder 将控件属性变成观查者 //好比 UIControl+Rx.swift 中的 isEnabled 属性即是一个 observer : let schedulerObserval = Observable<Int>.interval(1, scheduler: MainScheduler.instance) //在 bind 方法中建立 schedulerObserval .map { "当前索引:\($0)" //返回字符串 } .bind {(value) in //action print(value) } .disposed(by: disposeBag)