Обработчики завершения в target c iOS

Я изучал блоки, и это кажется довольно впечатляющим в использовании. Но потом я узнал, что мы можем использовать блоки в функциях как переменные, и его основное применение - это когда мы хотим выполнить некоторую асинхронную работу, чтобы после получения результата чего-либо нам пришлось выполнить какое-то действие.

Я изучил множество ресурсов и понял, что они делают. Я попытался сделать то же самое, просто передав строку так:

Определение блока в качестве параметра в файле.h

typedef void(^sudBlock)(NSString * myname);

- (void)blockAsLastParam:(NSString*)name completion:(sudBlock)blockName;

Реализация блока в качестве параметра в файле.m

-(void) blockAsLastParam:(NSString *)name completion:(sudBlock)blockName{
    blockName(name);
}


[self blockAsLastParam:@"sudh" completion:^(NSString *myname) {
        NSLog(@"This is block %@",myname);
    }];

Поэтому здесь я передаю "sudh" как строку и получаю ее снова.

Тем не менее, я не уверен, как все это работает. Есть ли учебник, в котором о том, как все делается, прекрасно запечатлевается с рисунками.

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

1 ответ

Вы можете сделать что-то вроде этого.

Вы можете обработать вашу строку в блоке и отправить результат обратно, используя myResultFunction, в myResultFunction вы можете делать все, что захотите, но если вы хотите обновить пользовательский интерфейс, используйте dispatch_get_main_queue, как показано ниже в примере,

[self blockAsLastParam:@"sudh" completion:^(NSString *myname) {

     NSString *processedString = @"";

     //Do your processing here your own logic
     [self myResultFunction:processedString];

}];

-(void)myResultFunction:(NSString*)porcessedString{
          //do anything with your String

         //UpDate UI
         dispatch_async(dispatch_get_main_queue(), ^{
        //write logic here for updating UI like updating textfield or label
    });           

}
Другие вопросы по тегам