Подтвердить что ты не робот

Как получить возвращаемое значение из блока завершения?

Можно ли запустить блок завершения в основном потоке?

Например, у меня есть один метод, который возвращает значение:

- (int)test
{

    /* here one method is called with completion block with return type void */

    [obj somemethodwithcompeltionblock:
      {
         /* here I am getting my Int which I want to return */
      }
      ];
}

но я не вижу, как вернуть целочисленное значение из блока завершения в результате этого метода, потому что блок завершения работает в фоновом потоке.

Как я могу это сделать?

4b9b3361

Ответ 1

Вам не хватает некоторых основ асинхронной разработки с блоками. Вы не можете вернуть отправленный блок из любого места, кроме своей области. Подумайте о каждом блоке как о собственном методе, а не о встроенном коде.

Я думаю, что то, что вы ищете, похоже на это...

- (void)testWithHandler:(void(^)(int result))handler
{
    [obj somemethodwithcompeltionblock:^{
            int someInt = 10;
            dispatch_async(dispatch_get_main_queue(), ^{
                handler(10);
            });
      }
      ];
}


- (void)callSite
{
    [self testWithHandler:^(int testResult){
        NSLog(@"Result was %d", testResult);
    }];
}