RXSwift简单异步示例?

RXSwift简单异步示例?,swift,rx-swift,Swift,Rx Swift,我是RXSwift新手,我只是尝试实现一个简单的异步示例 但订阅永远不会被调用 我想念什么 let disposeBag = DisposeBag() Observable<Any>.create { observer in DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 3) { observer.onNext(&

我是RXSwift新手,我只是尝试实现一个简单的异步示例

但订阅永远不会被调用

我想念什么

let disposeBag = DisposeBag()
        
Observable<Any>.create {

    observer in
    
    DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 3) {
        
        observer.onNext("done")
        
        observer.onCompleted()
        
    }
    
    return Disposables.create()
    
}
.subscribe { print($0) }
.addDisposableTo(disposeBag)
let dispebag=dispebag()
创造{
观察员
DispatchQueue.global(qos:.background).asyncAfter(截止日期:.now()+3){
observer.onNext(“完成”)
observer.onCompleted()
}
返回一次性物品。创建()
}
.订阅{打印($0)}
.addDisposableTo(disposeBag)
======================更新======================

我正在尝试做一些更高级的事情,一个允许传递上一个值的链,但是结果出乎意料。我想念什么

let disposeBag = DisposeBag()
        
Observable<Any>.create {

    observer in
    
    DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 3) {
        
        observer.onNext("done")
        
        observer.onCompleted()
        
    }
    
    return Disposables.create()
    
}
.subscribe { print($0) }
.addDisposableTo(disposeBag)
产量为

下一步(完成1-完成2)

我所期望的是

下一步(完成1)

下一步(完成1-完成2)

完成

类异步对象{
func asyncTest1()->可观察{
返回可观察的。创建{
(o:AnyObserver)->一次性使用
DispatchQueue.main.asyncAfter(截止日期:.now()+3){
o、 onNext(“完成1”)
o、 未完成()
}
返回一次性物品。创建()
}
}
func asyncTest2(值:字符串)->可观察{
返回可观察的。创建{
(o:AnyObserver)->一次性使用
DispatchQueue.main.asyncAfter(截止日期:.now()+1){
o、 onNext(“\(值)-完成2”)
o、 未完成()
}
返回一次性物品。创建()
}
}
}
类ViewController:UIViewController{
设disposeBag=disposeBag()
让observer=AsyncObject()
//MARK:Init方法
重写func viewDidLoad(){
super.viewDidLoad()
self.observer.asyncTest1()
.flatMap{self.observer.asyncTest2(值:$0)}
.订阅{打印($0)}
.addDisposableTo(disposeBag)
}
}

从RxSwift Slack@sergdot获得帮助

let test1 = self.observer.asyncTest1().shareReplay(1)

let test2 = test1.flatMap { self.observer.asyncTest2(value: $0) }

Observable.of(test1, test2).merge().subscribe {

    print($0)

}


我想你可以把这个和原来的合并起来,达到预期的效果。所以应该是这样的

let test1 = self.observer.asyncTest1()
let test2 = test1.flatMap { self.observer.asyncTest2() }

Observable
    .of(test1, test2)
    .merge()
    .subscribe { print($0) }
    .addDisposableTo(disposeBag)

test1.concat(test2.subscribe{print($0)}.addDisposableTo(disposeBag)与test1.concat(test2.subscribe{print($0)}.addDisposableTo(disposeBag))有什么不同?结果是我所期望的,但我发现asyncTest1可以执行两次。我希望asyncTest1和asyncTest2只执行一次,可能吗?因为在实际场景中,asyncTest1可能是一种登录方法,而asyncTest2可能是一种访问用户数据的方法。
let test1 = self.observer.asyncTest1()
let test2 = test1.flatMap { self.observer.asyncTest2() }

Observable
    .of(test1, test2)
    .merge()
    .subscribe { print($0) }
    .addDisposableTo(disposeBag)