ios - 如何在信号链中发送错误
<p><p>我有一个包含整数值的信号 A。 -1 值表示无效结果,所以我想发送错误,而不是将 -1 作为值传递。这样订阅 B 的任何东西都将通过 subscribeNext: 接收有效整数,并通过 subscribeError: 接收错误。</p>
<p>我想我知道如何使用 RACSubject 做到这一点:</p>
<pre><code>RACSequence *A = [@[ @(2), @(6), @(5), @(-1), @(4) ] rac_sequence];
RACSubject *B = ;
[A subscribeNext:^(NSNumber *val) {
if ( == -1 ) {
];
} else {
;
}
} error:^(NSError *error) {
;
} completed:^{
;
}];
</code></pre>
<p>我想知道是否有更“内联”的方式来做到这一点:</p>
<pre><code>RACSequence *A = [@[ @(2), @(6), @(5), @(-1), @(4) ] rac_sequence];
RACSignal *B = [A filter:^BOOL(id val) {
if ( == -1 ) {
//FIXME: send an error to B's subscriber(s)
return NO;
} else {
return YES;
}
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>执行此操作的主要方法是使用 <code>-flattenMap:</code>,类似于您在上面编写 <code>-filter:</code> 的方式。使用您的示例:</p>
<pre><code>RACSignal *B = [A flattenMap:^(NSNumber *number) {
if (number.intValue == -1) {
return ];
} else {
return ;
}
}];
</code></pre>
<h3>更新</h3>
<p>或者,使用较新的 <a href="https://github.com/ReactiveCocoa/ReactiveCocoa/blob/74ebd6de5138d68469f59ef5faccfe083919912f/ReactiveCocoaFramework/ReactiveCocoa/RACSignal%2BOperations.h#L317-335" rel="noreferrer noopener nofollow"><code>-try:</code></a>运营商:</p>
<pre><code>RACSignal *B = [A try:^(NSNumber *number, NSError **error) {
if (number.intValue == -1) {
*error = ;
return NO;
}
return YES;
}];
</code></pre></p>
<p style="font-size: 20px;">关于ios - 如何在信号链中发送错误,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/17980053/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/17980053/
</a>
</p>
页:
[1]