RxSwift学习笔记4:disposeBag/scheduler/AnyObserver/Binder
let disposeBg = DisposeBag()
//直接在创建
//在 subscribe 方法中创建
let ofObserval = Observable.of("a","b","c")
ofObserval.subscribe(onNext: { (element) in
print(element)
}, onError: { (error) in
print(error.localizedDescription)
}, onCompleted: {
print("完成")
}) {
print("取消")
}.disposed(by: disposeBg) let schedulerObserval = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
//在 bind 方法中创建
schedulerObserval
.map {
"当前索引:\($0)" //返回字符串
}
.bind {(value) in
//action
print(value)
}
.disposed(by: disposeBg)
//写在appdelegate里不执行,写在VC里正常??? //AnyObserver 可以用来描叙任意一种观察者。
//配合 subscribe 方法使用
let anyObserval:AnyObserver<String> = AnyObserver{ event in
switch event{
case .next(let data):
//action
print(data)
case .error(let error):
print(error)
case .completed:
print("完成")
}
}
// let anyOB = ofObserval.subscribe(anyObserval)
// print(anyOB) //配合 bindTo 方法使用
schedulerObserval
.map{"点前索引\($0)"}
.bind(to: anyObserval)
.disposed(by:disposeBg) /*===> 写在appdelegate里不执行,写在VC里正常???
当前索引:0
当前索引:1
当前索引:2
当前索引:3
当前索引:4
当前索引:5
当前索引:6
当前索引:7
当前索引:8
当前索引:9
当前索引:10
*/
@IBOutlet weak var label: UILabel!
@IBOutlet weak var mbutton: UIButton! let disposeBag = DisposeBag() //上面序列数显示样例中,label 标签的文字显示就是一个典型的 UI 观察者。
//它在响应事件时,只会处理 next 事件,而且更新 UI 的操作需要在主线程上执行。
//那么这种情况下更好的方案就是使用 Binder。
let blinderObserval:Binder<String> = Binder(label){view,text in
view.text = text
} //Observable序列(每隔1秒钟发出一个索引数)
let scheduleObservable = Observable<Int>.interval(1, scheduler: MainScheduler.instance) scheduleObservable
.map{"当前索引\($0)"}
.bind(to: blinderObserval)
.disposed(by: disposeBag) scheduleObservable
.map {$0 % 2 == 0}
.bind(to: mbutton.rx.isEnabled)
.disposed(by: disposeBag) //Binder 在 RxCocoa 中的应用
let schedulerObserval = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
//在 bind 方法中创建
schedulerObserval
.map {
"当前索引:\($0)" //返回字符串
}
.bind {(value) in
//action
print(value)
}
.disposed(by: disposeBag)
补充知识:
//Swift==>map
let array = [1,2,3,4,5] let mapArray = array.map { (value) -> Int in
return value + 2
}
print(mapArray)
//===>[3, 4, 5, 6, 7] let mapArray1 = array.map{
return $0*2
}
print(mapArray1)
//===>[2, 4, 6, 8, 10] func arrayCount(int:Int) -> Int{
return int*3
}
let mapArray0 = array.map(arrayCount)
print(mapArray0)
//===>[3, 6, 9, 12, 15] /*
2 flatMap与map不同之处:
(1)flatMap返回后的数组中不存在nil,同时它会把Optional解包
(2)flatMap还能把数组中存有数组的数组(二维数组、N维数组)一同打开变成一个新的数组
*/
//Swift==>flatMap
let mapArr = array.map { (int) -> String? in
let ms = "\(int)"
return ms
}
print(mapArr)
//===>[Optional("1"), Optional("2"), Optional("3"), Optional("4"), Optional("5")] //flatMap' is deprecated: Please use compactMap(_:)
//for the case where closure returns an optional value Use 'compactMap(_:)' instead
let mapArr1 = array.compactMap { (int) -> String? in
let ms = "\(int)"
return ms
}
print(mapArr1)
//===>["1", "2", "3", "4", "5"] let testArray = [[1,2,3],[4,5,6],[7,8,9]]
let mapArray3 = testArray.map{$0}
print(mapArray3)
//===>[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let mapArray4 = testArray.flatMap{$0}
print(mapArray4)
//===>[1, 2, 3, 4, 5, 6, 7, 8, 9]
RxSwift学习笔记4:disposeBag/scheduler/AnyObserver/Binder的更多相关文章
- RxSwift学习笔记5:Binder
使用 Binder 创建观察者 //Observable序列(每隔1秒钟发出一个索引数) let scheduleObservable = Observable<Int>.interval ...
- RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy
1.buffer的基本使用 let publishSubject = PublishSubject<String>() //buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参 ...
- 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 ...
- RxSwift学习笔记2:Observable/生命周期/Event/oneNext/onError/onCompleted/
Observable 是 Rx 的根基 官网:http://reactivex.io/ github地址:https://github.com/ReactiveX/RxSwift Observabl ...
- RxSwift学习笔记1:RxSwift的编程风格
第一天:简单体验与RxSwift的编程风格 import UIKit//导入Rx相关框架 import RxSwift import RxCocoa struct Music { let name:S ...
- RxSwift学习笔记10:startWith/merge/zip/combineLatest/withLatestFrom/switchLatest
//startWith //该方法会在 Observable 序列开始之前插入一些事件元素.即发出事件消息之前,会先发出这些预先插入的事件消息 Observable.of(1,2,3) .startW ...
- RxSwift学习笔记9:amb/tabkeWhile/tabkeUntil/skipWhile/skipUntil
//amb基本介绍 //当传入多个 Observables 到 amb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素. //并忽略掉其他的 Observable ...
- RxSwift学习笔记6:Subjects/PublishSubject/BehaviorSubject/ReplaySubject/Variable
// 从前面的几篇文章可以发现,当我们创建一个 Observable 的时候就要预先将要发出的数据都准备好,等到有人订阅它时再将数据通过 Event 发出去. // 但有时我们希望 Observabl ...
- RxSwift学习笔记3:生命周期/订阅
有了 Observable,我们还要使用 subscribe() 方法来订阅它,接收它发出的 Event. let observal = Observable.of("a",&qu ...
随机推荐
- Nowcoder 练习赛26E 树上路径 - 树剖
Description 传送门 给出一个n个点的树,1号节点为根节点,每个点有一个权值 你需要支持以下操作 1.将以u为根的子树内节点(包括u)的权值加val 2.将(u, v)路径上的节点权值加va ...
- ps教程分享:一定要记住这20种PS技术!
一定要记住这20种PS技术!会让你的照片美的不行! 一种简单的数码照片后期润饰 1)打开图片,执行色像/饱和度(-40)降低饱和度. 2)新建一图层,将图层模式改为柔光,用画笔工具将需要润饰的部分画几 ...
- 设计模式之生成者模式java源代码
假设要组装一辆自行车,并且自行车就是车轮和车架组成. Builder对应于组装自行车所使用的车轮和车架 ConcreteBuiler对应于自行车的车轮和车架,同时可以返回一辆自行车. Product对 ...
- DB2有五种约束
DB2有五种约束: NOT NULL 约束是这样一种规则,它防止在表的一列或多列中输入空值. 唯一约束(也称为唯一键约束)是这样一种规则,它禁止表的一列或多列中出现重复值.唯一键和主键是受支持的唯一约 ...
- 如何使用putty远程连接linux
如何使用putty远程连接linux | 浏览:5001 | 更新:2013-08-24 10:36 1 2 3 4 5 分步阅读 putty是一款超轻量级的运行在windows操作系统上的用于远程连 ...
- 栈(NOIP2003&水题测试2017082501)
题目链接:栈 这题不难. 我们看一下,其实可以发现是卡特兰数. 不知道卡特兰数?没事,给你简单讲一下. 卡特兰数的递推式f(n)=f(0)*f(n-1)+f(1)*f(n-2)+-+f(n-2)*f( ...
- spring自动类型转换========Converter和PropertyEditor
Spring有两种自动类型转换器,一种是Converter,一种是propertyEditor. 两者的区别:Converter是类型转换成类型,Editor:从string类型转换为其他类型. 从某 ...
- GDBT
理论知识: 第四范式自主研发算法GBDT(Gradient Boosting Decision Tree) GBDT是一种基分类器为决策树的集成学习方法.决策树是一种常见的机器学习算法,GBDT中使用 ...
- SimpleDateFormat转换时间,12,24时间格式[转]
SimpleDateFormat转换时间,12,24时间格式 来自:http://blog.csdn.net/dongguang1082/article/details/4387165 在使用Simp ...
- WPF中的路由事件(转)
出处:https://www.cnblogs.com/JerryWang1991/archive/2013/03/29/2981103.html 最近因为工作需要学习WPF方面的知识,因为以前只关注的 ...