Обработчики завершения в 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
});
}