1

我有用来创建信号的 UITextField。我有以下转换/管道(不确定正确的术语!)

[[[self.searchText.rac_textSignal
    throttle:0.3]
    map:^(NSString *text) {
        NSString* url = [NSString stringWithFormat:@"http://search.twitter.com/search.atom?rpp=20&since_id=0&q=%@", text];
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
        return [NSURLConnection rac_sendAsynchronousRequest:request];
    }]
    subscribeNext:^(id x) {
        NSLog(x);
    }];

基本上我想根据当前的文本字符串执行搜索。

但是,通过 map 返回的结果是一个 RACSignal。我想要的是让我的地图返回来自 URLConnection 的响应,而不是信号。

有任何想法吗?

4

1 回答 1

3

您想使用-[RACSignal flattenMap:]而不是-[RACSignal map:].

-map:只会将 NSString 映射到一个信号中,并将该信号作为下一个值传递到您的订阅块。这很好,但是您必须在订阅块中显式订阅该信号,这很麻烦。-flattenMap:也会将 NSString 映射到一个信号中,但是它也会将该信号的值扁平化为外部信号的值流。

在您的场景中,该+[NSURLConnection rac_sendAsynchronousRequest:]信号被称为“内部信号”。展平其值为内部信号(也称为“信号信号”)的外部信号会导致内部信号的值被传递给外部信号的订阅者。

于 2013-11-29T02:17:36.303 回答