gpt4 book ai didi

ios - 如何在完成 block 中返回值

转载 作者:行者123 更新时间:2023-11-28 19:31:41 25 4
gpt4 key购买 nike

我有管理与 AF​​Networking 的连接的类。

所以我想像这样调用我的函数 NSDictionary *dict = [ServerManager requestWithURL:@"https://someurl.com"];

这是另一个类中的函数:

- (NSDictionary *) requestWithURL:(NSString *)requestURL {
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];
[manager GET:requestURL parameters:nil progress:nil
success:^(NSURLSessionDataTask *operation, id responseObject){

return responseObject;

}
failure:^(NSURLSessionDataTask *operation, NSError *error) {

}];
}

我知道这样做是不正确的。那么我应该怎么做才能将 responseObject 返回给 NSDictionary *dict 呢?我想了解使用 block 进行异步开发的基本概念。

最佳答案

由于网络请求在启动后很长时间内完成,处理结果的唯一方法是将 block 传递给您的请求方法...

// when request completes, invoke the passed block with the result or an error
- (void)requestWithURL:(NSString *)requestURL completion:(void (^)(NSDictionary *, NSError *))completion {
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];
[manager GET:requestURL parameters:nil progress:nil success:^(NSURLSessionDataTask *operation, id responseObject){
if (completion) completion((NSDictionary*)responseObject, nil);
}, failure:^(NSURLSessionDataTask *operation, NSError *error) {
if (completion) completion(nil, error);
}];
}

在 ServerManager.h 中将其公开

- (void)requestWithURL:(NSString *)requestURL completion:(void (^)(NSDictionary *, NSError *))completion;

在其他地方,调用它:

[ServerManager requestWithURL:@"http://someurl.com" completion:^(NSDictionary *dictionary, NSError *error) {
// check error and use dictionary
}];

关于ios - 如何在完成 block 中返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43577611/

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