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 ...
随机推荐
- Android.InstallDevelopmentEvn
1. 如何搭建Android Application的开发环境 http://blog.csdn.net/yzhj2005/article/details/6980676 2. 在Mac OS X系统 ...
- 错误:在非结构或联合中请求成员‘next’
#include <stdio.h> #include <stdlib.h> #define ElemType int #define Status int #define O ...
- linux中的定时任务创建
1.查看root用户身份下正常运行的定时任务 crontab -l -u XXX 列出XXX用户的所有定时任务,如有没有会提示 no crontab for XXX列出所有的用户:cat /etc/p ...
- UI设计教程分享:电商网页页面设计常见表现手法
1.手绘插画 场景.人物以及加上故事的创意绘画 会给人梦幻若隐若现的感觉,留下深刻的印象,适合做活动页面以及宣传自已的品牌 2.简约 颜色少于三色,背景以明度偏低的颜色为主,在信息大爆炸的时代,我们 ...
- SCM_SVN_CVS
SCM_SVN_CVS SCM:一种用于记录并控制软件数据的工具.比如有:CVS(有过时趋势)和SVN(更加常用). 版本控制的概念: Respository:仓库 Workspace:工作台 Del ...
- c#对dataset和list集合压缩和解压,能提高访问速度
public class YS { public static byte[] Decompress(byte[] data) { byte[] bData; MemoryStream ms = new ...
- 浅谈Spring中的Quartz配置
浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...
- ajax 简介0
WEB项目总是发生些新的变化,过去每个人都会抱怨WEB项目功能不如CS程序丰富,相应速度不够快速.但现在由于Ajax的出现有了很大的改观,具有快速的高响应性的用户界面.在传统的Web 应用程序中,当用 ...
- 车站(NOIP1998)
题目链接:车站 这一题,首先你要会推导,推到出式子后,就会像我一样简单AC. 给一张图: 这里,t是第二个车站上车人数. 有什么规律? 其实很好找.有如下规律: 第x车站的人数增量为第x-2车站的上车 ...
- centos6 搭建nginx实现负载均衡
一.安装nginx 1)准备2台服务器,环境一样,同时执行 rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.r ...