2017-03-20 68 views
0

我試圖開始使用RxSwift,因此我嘗試創建一個請求的函數,並試圖實現與TRON(我使用的HTTP庫)一起提供的rxResult()函數。但關於這方面的文檔不是很詳細。任何人都可以在正確的方向上指出我做錯了什麼?這是我寫的函數:用TRON實現RxSwift

static func readAllWithRx() { 
    let token = UserDefaults.standard.value(forKey: Constants.kTokenUserDefaultsKey) as! String 
    let url = URL(string: "api/url")! 
    let request: APIRequest<AssessmentResponse, MyAppError> = APIHelper.tron.request(url.absoluteString) 

    _ = request.rxResult().subscribe(onNext: { AssessmentResponse in 
     print("RX AssessmentResponse \(AssessmentResponse)") 
    }, onError: { Error in 

    }, onCompleted: { 

    }, onDisposed: { 

    }) 
} 

最後我嘗試我的控制器內調用此請求使用:

let read = Assessments.readAllWithRx() 

回答

1

目前正處在開始兩兩件事:

  1. let read = Assessments.readAllWithRx()假定該函數同步返回某個東西
  2. 您發佈的readAllWithRx的實現不會返回任何內容。

我從來沒有使用TRON,但據我所看到的,它的rxResult()返回Observable<T>其中T是一種響應。在這種情況下,要獲得asynchronously AssesmentResponse,您需要訂閱observable(如您已經做過的那樣)。

下面是一個例子 - 你readAllWithRx的更新執行(不會大概編,寫在記事本中碼):

static func readAllWithRx() -> Observable<AssessmentResponse> { 
    let token = UserDefaults.standard.value(forKey: Constants.kTokenUserDefaultsKey) as! String 
    let url = URL(string: "api/url")!  
    let request: APIRequest<AssessmentResponse, MyAppError> = APIHelper.tron.request(url.absoluteString) 
    return request.rxResult() 
} 

那麼,如果你需要在代碼中某處得到AssessmentResponse:

Assessments.readAllWithRx().subscribe(onNext: { result in 
    // your response here 
    print(result) 
})