//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)