Как поместить блок (замыкание) в переменную в Objective- C? - PullRequest
0 голосов
/ 28 января 2020

Привыкнув к Swift, я немного поработал с замыканиями как parameters и как variables. Я пытаюсь перевести это в Objective- C сейчас. Мне удалось создать простой block, например:

-(void)myFunc:(void(^)(void))callback {
    callback();
}

И из viewDidLoad()

[self myFunc:^{
        NSLog(@"?MyCallBack");
    }];

Теперь я хотел бы поместить block в variable. В Swift это будет что-то вроде этого:

Определение variable

var completionHandler: (() -> ())?

с использованием его в качестве завершения в function или чем-либо еще:

DispatchQueue.main.async {
    self.completionHandler?()
}

и на самом деле callback

completionHandler = { 
     //DOSTUFF
}

Как бы это перевести на Objective- C?

Что-то вроде ... объявления

void (^completion)(void); 

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

completion;

и callback

completion = ^void(void){
    NSLog(@"?YAY");
};

Так чего не хватает?

1 Ответ

0 голосов
/ 28 января 2020

Хорошо, поэтому основная проблема заключалась в том, что completion должен быть запущен внутри dispatch_async, что я и сделал на своей версии swift, но по какой-то причине пропустил здесь.

dispatch_async(dispatch_get_main_queue(), ^(void){
            completion();
        });
...