首页 > 解决方案 > BREAK 语句不在循环或切换目标 c

问题描述

我有一组数组,我需要循环并识别每个 url 域传递 200 状态代码。如果第一个索引值通过,那么我将打破循环并将 url 保存在本地。这是我的代码:

for (int j = 0; j < items.count; j++){
                                NSString *urlStr2 = items[j];
                                [session GET:urlStr2 parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {
                                    // nil
                                } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                                    // The domain name request is successful, processing data
                                    
                                    NSURL *url = [NSURL URLWithString:urlStr2];
                                    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
                                    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
                                    [NSURLConnection cancelPreviousPerformRequestsWithTarget:self];
                                    
                                    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                                        
                                        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                        
                                        if ([httpResponse statusCode] == 200){
                                            
                                            h5UrlStr = urlStr2;
                                            break;
                                        }
                                    }];
                                    
                                } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                                    // Domain name request failed
                                    
                                    if (error.code == -1003) {
                                    }
                                }];
                            }

但问题是当我在满足条件时放置中断时,会出现错误,说明中断语句不在循环或切换目标c中。我应该如何打破循环?请帮忙。谢谢

标签: objective-cloopsbreak

解决方案


在这种情况下,break 对您没有帮助,因为您在 lambda(匿名函数)中调用它。这是完全不同的范围。正如我在您的代码中看到的那样,您正在启动items.count并行请求,但您只需要第一次成功的结果。

一种可能的解决方案是为回调函数分配名称,摆脱循环并GET在每次失败时使用高级元素计数器进行相同的调用 while j < items.count。在这种情况下,所有请求都将是顺序的,一个接一个,直到其中一些成功。这可能需要一些时间。

另一种解决方案是并行启动请求(可能不是同时针对所有元素items,而是针对某个块),并在每次成功调用时检查是否已经获得结果。如果是,只需忽略当前并返回。这速度更快,但会浪费带宽和计算资源。


推荐阅读