OStack程序员社区-中国程序员成长平台

标题: iOS如何从 block 中获取变量值? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 08:55
标题: iOS如何从 block 中获取变量值?

我可以从 block 中获取变量值吗?

    - (Params *) getParams {
    __block Params* params = nil;
        //make post, get requests
    [JSONHTTPClient getJSONFromURLWithString"http://www.blankspot.ru/api/getinterval"
                                       params:nil
                                      completion:^(id json, JSONModelError *err) {
                                       NSLog(@"json = %@", json);
                                       NSLog(@"Error = %@", err );
                                      NSDictionary* json1 = json;
                                       NSLog(@" %@ ob ", [json1 objectForKey"success"]);
                                       params = [[Params alloc] initWithDictionary:json1 error:&err];

                                    NSLog(@"params123 = %@", params); // is not null
                                        }];

    NSLog(@"params123 = %@", params); //this is null
    return params;
   }

在第一个变体 NSLog 中查看非空值,但 block 后的第二个变体将为 nil。



Best Answer-推荐答案


这是因为 getJSONFromURLWithString 是异步的(它使用 dispatch_async 进行请求调用),这意味着它将在另一个线程上调用,而当前线程将继续运行.

您的 NSLog 显示 nil 因为由于调用的异步性质,该 block 可能在到达 NSLog 行之后的某个时间执行(因为 URL 请求需要一些时间才能完成并且不是立即的)

关于iOS如何从 block 中获取变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364718/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4