我是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)
完整的
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 asyncTest2(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.asyncTest2(value: $0) }
        .subscribe { print($0) }
        .addDisposableTo(disposeBag)

    }

}

最佳答案

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

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

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

关于swift - RXSwift简单的异步示例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40797515/

10-09 09:58