swift - 如何在没有“序列不包含任何元素”的情况下将 Maybe 转换为 Single
问题描述
我正在使用 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()
}
}
推荐阅读
- python - 递归函数经常重复
- r - R 数据争论问题
- r - 使用分离和变异函数
- python - 如何使用 Python panda 在 csv 中添加新行
- c - 为什么结构成员必须始终具有标识符?
- vb.net - VB .Net 导航每个链接并获取特定的 url
- azure - 如何使用 App Insights 关联前端和后端?
- regex - Visual Studio Snippet:我可以使用 TM_FILENAME 从 RELATIVE_FILEPATH 获取命名空间吗?
- cmake - 在 gcloud 上部署烧瓶应用程序时出现“找不到 CMAKE_CXX_COMPILER”错误
- javascript - mat-slider 不听 getelementbyid