似乎rx-swift还没有实现DefaultIfEmpty。还有其他方法可以模仿这种行为吗?
del request.session['result']
答案 0 :(得分:1)
我有类似的问题,但只需要一个来自observable的值,所以简单的解决方案是连接而不是1:
open Players;;
let () =
let mgr = new player_manager
答案 1 :(得分:0)
我使用toArray
来模仿这种行为。使用PublishSubject
的示例(我希望可以轻松转换为使用myList
):
let subjectInt = PublishSubject<Int>()
let emptyReplacement = subjectInt
.toArray()
.filter {$0.isEmpty}
.map{ _ in return 42}
let defaultIfEmpty = [subjectInt, emptyReplacement].toObservable().merge()
defaultIfEmpty.subscribeNext {
print("defaultIfEmpty: \($0)")
}
subjectInt.on(.Next(11)) //
subjectInt.on(.Next(33)) //comment these 2 lines out to see the default value 42 printed
subjectInt.on(.Completed)
答案 2 :(得分:0)
要完善Michal所说的内容,toArray()
提供了解决方案:
extension Observable {
func defaultIfEmpty(_ other: Observable<E>) -> Observable<E> {
let replacement = toArray()
.flatMap { array -> Observable<E> in
if array.isEmpty {
return other
} else {
return Observable.empty()
}
}
return concat(replacement)
}
}
用法:
let a = Observable.of(1, 2, 3)
let b = Observable.of(-1, -2, -3)
let c = Observable<Int>.of()
_ = a.defaultIfEmpty(b).subscribe(onNext: { print($0) })
// 1
// 2
// 3
_ = c.defaultIfEmpty(b).subscribe(onNext: { print($0) })
// -1
// -2
// -3