gpt4 book ai didi

ios - 如何从 block 主体返回函数值?

转载 作者:行者123 更新时间:2023-11-29 00:51:41 26 4
gpt4 key购买 nike

我有一个函数,其中返回类型为“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:

Incompatible block pointer types sending 'BOOL (^)(NSData * _Nullable __strong, NSURLResponse * _Nullable __strong, NSError * _Nullable __strong)' to parameter of type 'void (^ _Nonnull)(NSData * _Nullable __strong, NSURLResponse * _Nullable __strong, NSError * _Nullable __strong)'

最佳答案

您不能在 block 中返回值,因为它是异步的。您可以做的是使用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
}
}];

关于ios - 如何从 block 主体返回函数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38076198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com