如何从块体返回函数值?

时间:2016-06-28 12:23:47

标签: ios iphone block nsurlsession afnetworking-3

我的函数返回类型是'BOOL',函数体调用HTTP请求。

如果数据存在,我想返回'True'。我想同步管理

- (BOOL) randomFunction {
        NSURLSession *session = [NSURLSession sharedSession];
        [[session dataTaskWithRequest:mutableRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            if (data) {
                NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &error];
                NSString *status = (NSString *)[JSON valueForKey:@"enabled"];
                if ([status isEqualToString:@"true"]) {
    //                return YES; // ERROR
                }
            }
    //       return NO; // ERROR
        }] resume];
}
  

ERROR:

     

不兼容的块指针类型将'BOOL(^)(NSData * _Nullable __strong,NSURLResponse * _Nullable __strong,NSError * _Nullable __strong)'发送到'void(^ _Nonnull)类型的参数(NSData * _Nullable __strong,NSURLResponse * _Nullable __strong ,NSError * _Nullable __strong)'

1 个答案:

答案 0 :(得分:1)

您无法在块中返回值,因为它是异步的。你可以做的是使用completionHandler来发送结果。以下是示例代码:

-(void)randomFunction:(void (^)(BOOL response))completionHandlerBlock {
    NSURLSession *session = [NSURLSession sharedSession];
    [[session dataTaskWithRequest:nil completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (data) {
            NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &error];
            NSString *status = (NSString *)[JSON valueForKey:@"enabled"];
            if ([status isEqualToString:@"true"]) {
                completionHandlerBlock(YES);
            }
        }
        completionHandlerBlock(NO);
    }] resume];
}

并使用它:

[self randomFunction:^(BOOL response) {
    if (response) {
        //handle response
    }
}];