как заметил @Larme, вероятно, лучше передать здесь блок завершения в ваш метод, а затем вызвать его в блоках завершения любого из запросов (похоже, вы хотите использовать данные из первого веб-сервиса, если он имеети затем второй, если нет):
- (void)webServiceRequestWithCompletion:(void (^_Nullable)(NSData *_Nullable completionData, NSError *_Nullable error))completionAfter {
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"URL1"]];
[request setHTTPMethod:@"GET"];
// Call first service
[[NSURLSession.sharedSession dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (data) {
// If first webservice is successful then dont call second service
if (completionAfter) {
completionAfter(data, error);
}
return;
}
// Call second service
NSMutableURLRequest *request2 = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"URL2"]];
[request2 setHTTPMethod:@"GET"];
[[NSURLSession.sharedSession dataTaskWithRequest:request2 completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (completionAfter) {
completionAfter(data, error);
}
}] resume];
}] resume];
}
Тогда вы бы назвали это примерно так:
[self webServiceRequestWithCompletion:^(NSData *completionData, NSError *error) {
// do stuff with data returned from one of the two webservices here
}];
Если это не то, что вы пытаетесь сделать,тогда вам нужно будет отредактировать свой вопрос и предоставить дополнительный контекст, как то, как этот код называется и почему вы должны использовать семафор (чего он ждет?)
Этот сайт полезен для понимания того, как использоватьСинтаксис блока: http://goshdarnblocksyntax.com
И здесь у Apple хорошая документация: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html