我的函数返回类型是'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)'
答案 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
}
}];