如何在没有 "Sequence doesn't contain any elements" 的情况下将 Maybe 转换为 Single
How to convert Maybe to Single without "Sequence doesn't contain any elements"
我正在使用 RxSwift(https://github.com/ReactiveX/RxSwift).
我写了下面的代码:
let m1 = Maybe<String>.empty()
let m2 = Maybe<String>.just("AA")
let s1 = m1.asObservable().asSingle()
let s2 = m2.asObservable().asSingle()
Single.zip(s1, s2).subscribe(onSuccess: { a, b in
print("==================")
print(a)
print(b)
print("==================")
}, onError: { e in
print("EEEEE")
print(e) // Sequence doesn't contain any elements.
}).disposed(by: disposeBag)
发生错误 "Sequence doesn't contain any elements"
因为 m1
是 Maybe#empty
。
如何将 Maybe<String>
转换为 Single<String?>
?
如果Maybe
是empty
,我想做到nil.
在这种情况下,我希望 a
变量为 nil
。
自行解决
let s1 = m1.asObservable().first()
文档(评论)说
/**
The `first` operator emits only the very first item emitted by this Observable,
or nil if this Observable completes without emitting anything.
- seealso: [single operator on reactivex.io](http://reactivex.io/documentation/operators/first.html)
- returns: An observable sequence that emits a single element or nil if the source observable sequence completes without emitting any items.
*/
自定义扩展版本
自定义扩展版本我觉得我不需要,
但如果有必要
extension Maybe {
func asOptionalElementSingle() -> Single<Element?> {
return self.asObservable().first()
}
}
我正在使用 RxSwift(https://github.com/ReactiveX/RxSwift).
我写了下面的代码:
let m1 = Maybe<String>.empty()
let m2 = Maybe<String>.just("AA")
let s1 = m1.asObservable().asSingle()
let s2 = m2.asObservable().asSingle()
Single.zip(s1, s2).subscribe(onSuccess: { a, b in
print("==================")
print(a)
print(b)
print("==================")
}, onError: { e in
print("EEEEE")
print(e) // Sequence doesn't contain any elements.
}).disposed(by: disposeBag)
发生错误 "Sequence doesn't contain any elements"
因为 m1
是 Maybe#empty
。
如何将 Maybe<String>
转换为 Single<String?>
?
如果Maybe
是empty
,我想做到nil.
在这种情况下,我希望 a
变量为 nil
。
自行解决
let s1 = m1.asObservable().first()
文档(评论)说
/**
The `first` operator emits only the very first item emitted by this Observable,
or nil if this Observable completes without emitting anything.
- seealso: [single operator on reactivex.io](http://reactivex.io/documentation/operators/first.html)
- returns: An observable sequence that emits a single element or nil if the source observable sequence completes without emitting any items.
*/
自定义扩展版本
自定义扩展版本我觉得我不需要, 但如果有必要
extension Maybe {
func asOptionalElementSingle() -> Single<Element?> {
return self.asObservable().first()
}
}