簡體   English   中英

Reactive Cocoa:使用 RACCommand 響應 HTTPRequest

[英]Reactive Cocoa: Response from HTTPRequest using RACCommand

我是 Reactive Cocoa Framework 的新手,我只是在做一些簡單的測試,但我遇到了一個我想了解的問題。

基本上我只是在做一個 API 調用來從我的服務器獲取一個 JSON 對象,我想用 RAC 來做到這一點。 所以我的步驟如下:

首先,我以這種方式構建 RACCommand:

RACCommand *getLatestVersionCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
    return [[[API sharedInstance] getLatestAppVersion]
                materialize];
}];

現在我創建信號並以這種方式訂閱它:

RACSignal *versionCodeSignal = [[getLatestVersionCommand.executionSignals flatten] deliverOn:[RACScheduler mainThreadScheduler]];
[[versionCodeSignal
    map:^id(NSDictionary *responseObject) {
        return responseObject;
    }]
    subscribeNext:^(NSDictionary *responseObject) {
        NSArray *allVersions = [[NSArray alloc] initWithArray:[responseObject objectForKey:KEY_VERSIONS]];
        for(NSDictionary *version in allVersions) {
            NSString *device = [version objectForKey:KEY_DEVICE];
            if([device isEqualToString:KEY_IOS]) {
                NSString *latestVersionName = [[version objectForKey:KEY_VERSION] objectForKey:KEY_NAME];
                if([APP_VERSION compare:latestVersionName options:NSNumericSearch] == NSOrderedAscending) {
                    //There is a new version!
                    NSLog(@"There is a new version!!!");
                }
            }
        }
    }];

最后我以這種方式執行命令

[getLatestVersionCommand execute:self];

我面臨的問題是,在 subscribeNext 塊中,我收到的對象是一個 RACEvent 對象,而不是我期望的字典。 我知道我做錯了什么並且沒有正確理解完整的流程,我嘗試添加我認為我不需要的地圖功能只是為了測試而什么都沒有。

我發現的唯一方法是將 map 塊中的響應轉換為 RACEvent 並返回其值,但在我看來這不是正確的方法。

任何光將不勝感激。

從命令的信號塊中刪除對-[RACSignal materialize]的調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM