如何在没有 "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" 因为 m1Maybe#empty

如何将 Maybe<String> 转换为 Single<String?>

如果Maybeempty,我想做到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.
 */

https://github.com/ReactiveX/RxSwift/blob/c6c0c540109678b96639c25e9c0ebe4a6d7a69a9/RxSwift/Traits/ObservableType%2BPrimitiveSequence.swift#L30

自定义扩展版本

自定义扩展版本我觉得我不需要, 但如果有必要

extension Maybe {
    func asOptionalElementSingle() -> Single<Element?> {
        return self.asObservable().first()
    }
}