Ответ на заданный вопрос очень прост, но я подозреваю, что на самом деле это не ваш вопрос.Ничто в вашем вопросе не предполагает асинхронного поведения, но вы продолжаете говорить «блок завершения».Получение результатов от неасинхронных блоков - это просто вопрос возврата их результата:
// SomeBlock takes an int and returns an int
// (In your example you have it return void, but then what is "analyzed?"
typedef int(^SomeBlock)(int someValue);
// SomeOtherBlock takes an int and also a SomeBlock
typedef void(^SomeOtherBlock)(int someOtherValue, SomeBlock originalBlock);
void executeAnalyzeAndContinue(SomeBlock firstBlock, SomeOtherBlock secondBlock, int value) {
// execute the first block
int result = firstBlock(value);
// and analyze the callback (return value?) from that block.
if (result == 2) { NSLog(@"%@", @"It was two"); }
// Then, pass the first block as a parameter to the second block (and also a value?)
secondBlock(result, firstBlock);
}
Это действительно то, что вы имеете в виду?(Я подозреваю, что создание этого конспекта с использованием «некоторого блока» и тому подобного делает его гораздо более сложным, чем на самом деле, и что вы действительно хотите задать некоторый связанный вопрос, а не этот. И я думаю, что вы имеете в виду «выполнить», когда высказать "осуществить".)