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 ...
随机推荐
- iOS.Book.Mac OS X and iOS Internals: To the Apple’s Core
深入解析Mac OS X & iOS操作系统 http://product.china-pub.com/3769686
- iOS.Notification.Bar.Color
Reference: http://apple.stackexchange.com/questions/44246/what-determines-the-special-color-of-the-s ...
- kafka的advertised.host.name参数 外网访问配置
kafka的server.properties文件 ```host.name```开始只绑定在了内部IP上,对外网卡无法访问. 把值设置为空的话会kafka监听端口在所有的网卡上绑定.但是在外网访问时 ...
- swift 中使用weak self
request.responseString(encoding: NSUTF8StringEncoding) {[weak self] (res) -> Void in if let stron ...
- MySQL表的相关操作
操作数据表之前,必须先选择相应数据表所在的数据库 mysql> USE databaseName; -- 选择数据库 查看该数据库下的数据表 mysql> show tables; 确定数 ...
- Linux renew ip command
$ sudo dhclient -r //release ip 释放IP$ sudo dhclient //获取IP Now obtain fresh IP:$ sudo dhcli ...
- [Hbase]Hbase技术方案
HBase架构简介 HBase在完全分布式环境下,由Master进程负责管理RegionServers集群的负载均衡以及资源分配,ZooKeeper负责集群元数据的维护并且监控集群的状态以防止单点故障 ...
- 用EventLog Analyzer的预定义报表和告警来进行Syslog管理
用EventLog Analyzer的预定义报表和告警来进行Syslog管理 系统日志(Syslog)管理是几乎所有企业的重要需求.系统管理员将syslog看作是解决网络上系统日志支持的系统和设备性能 ...
- kbmMW均衡负载与容灾(2)(转载红鱼儿)
集中式均衡负载 为实现集中式均衡负载方案,需要实现两个不同的应用服务器,一个是只包含均衡负载组件再无其他内容的应用服务器,可称之为均衡负载应用服务器,下文简称LB Server,另外一个就是包含一个或 ...
- 2018.12.18 bzoj5296: [Cqoi2018]破解D-H协议(bsgs)
传送门 bsgsbsgsbsgs基础题. 考虑到给的是原根,因此没无解的情况. 于是只需要每次把a,ba,ba,b解出来. 然后可以通过预处理节省一部分时间. 代码: #include<bits ...