RxSwift和Alamofire:在处理响应数据的alamofire之后无法订阅事件

时间:2017-01-03 11:23:31

标签: swift alamofire rx-swift

以下是我的一些代码:

func toObservable() -> Observable<T> {
    return Observable.create {
        observer -> Disposable in
        let urlRequest = try? self.asURLRequest()

        Alamofire.request(urlRequest!)
            .responseObject{ (response: DataResponse<T>) in
                if response.result.isSuccess {
                    if let responseEntity = response.result.value {
                        if let _ = responseEntity.error {
                            observer.onError(ResponseError.generic)
                        } else {
                            observer.onNext(responseEntity)
                        }
                    } else {
                        // TODO
                    }
                } else {
                    // TODO
                }
        observer.onCompleted()

        }

        return Disposables.create()
    }
}

当我调用此函数时:

toObservable().subscribe(onNext: {
            print("onNext")
            // ... use $0 parameter
        }, onError: {
            print("onError")
            // ... use $0 parameter
        }, onCompleted: { 
            print("onCompelete")
        }, onDisposed: nil)
    .addDisposableTo(DisposeBag())

它无法打印任何东西。所以对此有任何想法吗?非常感谢!

(我使用了AlamofireObjectMapper,RxSwift框架)

同样的问题是here,但没有人回答。

2 个答案:

答案 0 :(得分:3)

尽量保持对disposbag的强烈引用:

let disposeBag = DisposeBag()

func setupRx() {

  toObservable()
      .debug("Alamofire.request")
      .subscribe(onNext: {
          print("onNext")
        // ... use $0 parameter
      }, onError: {
          print("onError")
        // ... use $0 parameter
      }, onCompleted: { 
          print("onCompelete")
      }, onDisposed: nil)
  .addDisposableTo(disposeBag)

}

您可以使用debug运算符查看发生的情况。

希望这可能会有所帮助。

答案 1 :(得分:0)

let disposeBag = DisposeBag()

addDisposable已被弃用..

func setupRx() {

  toObservable()
      .debug("Alamofire.request")
      .subscribe(onNext: {
          print("onNext")
        // ... use $0 parameter
      }, onError: {
          print("onError")
        // ... use $0 parameter
      }, onCompleted: { 
          print("onCompelete")
      }, onCompleted: {
        print("onCompelete")
        }).disposed(by: disposeBag)

}