gpt4 book ai didi

ios - ReactiveCocoa : Response from HTTPRequest using RACCommand

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:45 28 4
gpt4 key购买 nike

我是 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 block 中,我收到的对象是一个 RACEvent 对象,而不是我期望的字典。我知道我做错了什么并且没有正确理解整个流程,我尝试添加我认为我不需要的 map 功能只是为了测试什么都不需要。

我找到的唯一方法是将 map block 中的响应转换为 RACEvent 并返回其值,但在我看来这不是正确的方法。

任何光线都将不胜感激。

最佳答案

从命令的信号 block 中删除对 -[RACSignal materialize] 的调用。

关于ios - ReactiveCocoa : Response from HTTPRequest using RACCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22645870/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com