菜鸟教程小白 发表于 2022-12-13 03:15:56

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&#39;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]
查看完整版本: ios - 如何在信号链中发送错误