2016-11-25 100 views
0

我是新的RXSwift,我只是尝试实现一个简单的异步示例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) 

================= UPDATE ======================

我试图做一些更先进的事情,一个允许从前面传递值的链,但结果不是预期的。我想念什么?

产量

下一个(做1 - 完成2)

我所期待的是

下一个(做1)

下一个(已完成1 - 完成2)

comple泰德

class AsyncObject { 

    func asyncTest1() -> Observable<String> { 

     return Observable<String>.create { 

      (o: AnyObserver<String>) -> Disposable in 

      DispatchQueue.main.asyncAfter(deadline: .now() + 3) { 

       o.onNext("done 1") 

       o.onCompleted() 

      } 

      return Disposables.create() 

     } 

    } 

    func asycTset2(value: String) -> Observable<String> { 

     return Observable<String>.create { 

      (o: AnyObserver<String>) -> Disposable in 

      DispatchQueue.main.asyncAfter(deadline: .now() + 1) { 

       o.onNext("\(value) - done 2") 

       o.onCompleted() 

      } 

      return Disposables.create() 

     } 

    } 

} 

class ViewController: UIViewController { 

    let disposeBag = DisposeBag() 

    let observer = AsyncObject() 

    // MARK: Init Methods 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     self.observer.asyncTest1() 
     .flatMap { self.observer.asycTset2(value: $0) } 
     .subscribe { print($0) } 
     .addDisposableTo(disposeBag) 

    } 

} 

回答

0

得到帮助从RxSwift松弛@sergdot,

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

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

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

    print($0) 

} 

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

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

test1.concat(test2).subscribe { 

    print($0) 

} 
2

我认为你可以与原来的合并本,以达到预期的结果。所以它应该看起来像这样

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

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

很酷,太棒了!这正是我想要的! – PatrickSCLin

+0

与 有什么区别test1.concat(test2).subscribe {print($ 0)} .addDisposableTo(disposeBag) – PatrickSCLin

+0

哪个更好? – PatrickSCLin