将序列每个元素转换一遍,适合于序列内的元素类型改变,比如Bool转换为String, 或者其他值的操作。
输入类型, 输出还是类型
将序列的元素转换为其他序列, 就很适合a序列转换为b序列,比如
输入类型/序列, 输出
序列
和flapMap相似,不同的是只发出最新元素
一旦序列产生一个error,整个序列将被
终止
,后续监听也就监听不了,也包括序列转换
Error Handling 错误事件处理
实例代码:
private func createObservable() {
let subject = PublishSubject<Void>()
let otherOb = subject.asObservable()
.flatMapLatest({_ -> Observable<String> in
print("flatMap")
return self.netRequest()
subject.onNext(())
subject.subscribe(onNext: { (_) in
print("发出一次事件")})
.disposed(by: disposeBag)
subject.onNext(())
otherOb.subscribe(onNext: { (value) in
print("otherSub subscribe")
print(value)})
.disposed(by: disposeBag)
subject.onNext(())
subject.onNext(())
private func netRequest() -> Observable<String> {
return Observable<String>.create { (observer) -> Disposable in
observer.onError(NSError(domain: "www.baidu.com", code: 30, userInfo: [:]))
return Disposables.create()
运行日志打印
发出一次事件
发出一次事件
flatMap
Unhandled error happened: Error Domain=www.baidu.com Code=30 "(null)"
subscription called from:
发出一次事件
发出一次事件
可以看到,如果网络请求抛出error [1]之后的下一次next将不会转换,同理转换出来的序列也会中断。
如果不发出Error只发出next和complete
private func netRequest() -> Observable<String> {
return Observable<String>.create { (observer) -> Disposable in
observer.onNext("你好")
observer.onCompleted()
return Disposables.create()
发出一次事件
发出一次事件
flatMap
otherSub subscribe
发出一次事件
flatMap
otherSub subscribe
可以看到,序列没有中断,对应的转换也没有中断。
总之
不要轻易发出Error事件,考虑到会不会终止序列和转换。如果需要错误提示,采用Result也许更好。
RxSwift序列转换map将序列每个元素转换一遍,适合于序列内的元素类型改变,比如Bool转换为String, 或者其他值的操作。输入类型, 输出还是类型flapMap将序列的元素转换为其他序列, 就很适合a序列转换为b序列,比如输入类型/序列, 输出序列flapMapLatest和flapMap相似,不同的是只发出最新元素Error 序列中断一旦序列产生一个error,整个...
onerror事件用来协助处理页面中的JavaScript错误。当页面上出现异常时,error事件便在window对象上触发。例如:
在这种情况下,浏览器会显示错误信息:
如果不希望浏览器在默认对话框中显示出错消息,让onerror方法返回true即可。
此外,onerror方法还提供了三个参数用来确定错误确切的信息,分别是:
1)message:一个字符串,声明了出现的错误的信息(不同的浏览器中返回的消息内容略有差异)。
2)url:一个字符串,声明了出现错误的文档的URL。
3)line:一个数字,声明了出现错误的代码行的行号。
前言RxSwift是Swift函数响应式编程的一个开源库,由Github的ReactiveX组织开发,维护。RxSwift的目的是让让数据/事件流和异步任务能够更方便的序列化处理,能够使用Swift进行响应式编程目前,RxSwift在Github上收到了5000+Star,600+fork。本文的目的
介绍RxSwift的核心思想
讲解RxSwift的基础使用
介绍RxSwift的优点
如果你有时间
在这篇文章中我会对map,flatMap和flatMapLatest三个操作符进行比较,下面我们来举个例子。
let stream = Observable.interval(1000).take(10);
return stream.map(n => n * 2);
上面的代码模拟了异步行为,每隔1s发射一个数字。这个例子很简单,...
let publishSubject = PublishSubject<String>()
//buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参数是缓冲个数,第三个参数是线程。
//该方法简单来说就是缓存 Observable 中发出的新元素,当元素达到某个数量,或者经过了特定的时间,它就会...
RxSwift学习(一)— RxSwift介绍
RxSwift学习(二)— Observable 常见的序列创建方法
RxSwift学习(三)— RxSwift 高阶函数
RxSwift 高阶函数
今天我们来探索下RxSwift高阶函数,和一些组合函数的用法
组合操作符
startWith()
在开始从可观察源发出元素之前,发出指定的元素序列
elements:要附加到指定序列的元素
returns: 返回以指定值开头的源序列
public func startWith(_ elements:..
如何处理RxSwift的Error事件
翻译自:How to handle errors in RxSwift
在最近这些日子里,MVVM在iOS开发中变得越来约受欢迎,RxSwfit也变得越来越流行。在RxSwift中大多数属性都是序列(Observable)。
但是,当遇到error或者completed时,序列就会终止。
终止代表者序列订阅将不会接收到任何信息,当我刚开始学习Rx的时候,我并...
先上代码吧:
self.signedIn = input.loginTaps.withLatestFrom(usernameAndPassword)
.flatMapLatest { (username, password) in
return EmeAPI.sharedInstance.request(UserApi.login(loginName: usernam
WithLatestFrom.swift:
Merges two observable sequences into one observable sequence by combining each element from self with the latest element from the second source, if any.
Throttle.swift:
Returns an Observable that emits the first and the latest item emitted by the source Observable during sequential time windows of a specified duration.
This operator...
最近项目中有这么一个需求,下面是三个网络请求
A.从服务器获取到时间戳(GET 方法,获取 timeLine)
B.进行用户头像上传,获得回传的URL(POST方法,参数为 userId, timeLine,Image )
C.对用户信息进行设置(POST方,参数为 timeLine, avatarURL, userId)
对这个情景简单分析,不难得出一个结论,B依赖于A的...
public void DemoStream() {
String stringGather[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
System.out.println
ReactiveX:
transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable
将一个可观察序列中的所有元素映射成为另一个可观察序列。
Observable&lt;I...