使用 Binder 创建观察者

        //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 类进行扩展
 //既然使用了 RxSwift,那么更规范的写法应该是对 Reactive 进行扩展。
 //这里同样是给 UILabel 增加了一个 fontSize 可绑定属性。(注意:这种方式下,我们绑定属性时要写成 label.rx.fontSize)
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)  

RxSwift 自带的可绑定属性(UI 观察者)

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

Binder 在 RxCocoa 中的应用

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

  

  

RxSwift学习笔记5:Binder的更多相关文章

  1. RxSwift学习笔记4:disposeBag/scheduler/AnyObserver/Binder

    let disposeBg = DisposeBag() //直接在创建 //在 subscribe 方法中创建 let ofObserval = Observable.of("a" ...

  2. RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy

    1.buffer的基本使用 let publishSubject = PublishSubject<String>() //buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参 ...

  3. RxSwift学习笔记2:Observable/生命周期/Event/oneNext/onError/onCompleted/

     Observable 是 Rx 的根基 官网:http://reactivex.io/ github地址:https://github.com/ReactiveX/RxSwift Observabl ...

  4. RxSwift学习笔记1:RxSwift的编程风格

    第一天:简单体验与RxSwift的编程风格 import UIKit//导入Rx相关框架 import RxSwift import RxCocoa struct Music { let name:S ...

  5. RxSwift学习笔记10:startWith/merge/zip/combineLatest/withLatestFrom/switchLatest

    //startWith //该方法会在 Observable 序列开始之前插入一些事件元素.即发出事件消息之前,会先发出这些预先插入的事件消息 Observable.of(1,2,3) .startW ...

  6. RxSwift学习笔记9:amb/tabkeWhile/tabkeUntil/skipWhile/skipUntil

    //amb基本介绍 //当传入多个 Observables 到 amb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素. //并忽略掉其他的 Observable ...

  7. RxSwift学习笔记8:filter/distinctUntilChanged/single/elementAt/ignoreElements/take/takeLast/skip/sample/debounce

    //filter:该操作符就是用来过滤掉某些不符合要求的事件. Observable.of(1,2,3,4,5,8).filter({ $0 % 2 == 0 }).subscribe { (even ...

  8. RxSwift学习笔记6:Subjects/PublishSubject/BehaviorSubject/ReplaySubject/Variable

    // 从前面的几篇文章可以发现,当我们创建一个 Observable 的时候就要预先将要发出的数据都准备好,等到有人订阅它时再将数据通过 Event 发出去. // 但有时我们希望 Observabl ...

  9. RxSwift学习笔记3:生命周期/订阅

    有了 Observable,我们还要使用 subscribe() 方法来订阅它,接收它发出的 Event. let observal = Observable.of("a",&qu ...

随机推荐

  1. 2019年学Java开发有优势吗?

    随着信息科技的发展,在我们的日程生活和工作中到处充斥和使用着互联网信息技术.事实说明,互联网已经越来越广泛地深入到人们生活的方方面面,Java技术服务市场需求空缺会越来越大.学会一门IT技术,将拥有更 ...

  2. vue 动态路由按需加载的三种方式

    在Vue项目中,一般使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hell ...

  3. Json数据处理协议与办法

    [JSON学习]     一.概述     JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文 本格式,是理想的数据交换格式.同时,J ...

  4. 03. pt-config-diff

    pt-config-diff h=192.168.100.101,P=3306,u=admin,p=admin h=192.168.100.102,P=3306,u=admin,p=admin pt- ...

  5. POJ1659 Frogs' Neighborhood(青蛙的邻居) Havel-Hakimi定理

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 8729   Accepted: 36 ...

  6. Metasploit学习

    阶段一:初步渗透 GO! msfconsole 相关漏洞 msf > search platform: windows xp sp3 查看某个漏洞后,查看漏洞详细信息 msf > info ...

  7. Add to Array-Form of Integer LT989

    For a non-negative integer X, the array-form of X is an array of its digits in left to right order.  ...

  8. jvm gc 算法

    1标记-清除法 他是现代垃圾回收算法的思想基础. 标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段. 在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象(根搜索算法).而未被标记的对象 ...

  9. android源码下载/查看地址

    源码下载: http://git.omapzoom.org/ 高通平台android源码下载地址: https://www.codeaurora.org/xwiki/bin/QAEP/WebHome ...

  10. mybatis学习七 typeAliases 别名

    1. mybatis中内置的一些别名,例如Map,List,int 等常用类型 2.手动为某个类设置别名 在mybatis的全局配置文件中加如下代码 <typeAliases> <t ...