Xcode не может распознать блок dispatch_once как правильный - PullRequest
0 голосов
/ 11 октября 2018

Я использую этот общий стиль кода в нескольких разных местах по всей моей кодовой базе, однако в одном месте XCode внезапно это не нравится:

static dispatch_once_t once;
dispatch_once(&once, ^{
    ...
});

Он показывает следующую ошибку:

Incompatible block pointer types passing 'void *(^)(void)' to parameter of type 'dispatch_block_t _Nonnull' (aka 'void (^)(void)')

Стиль точно такой же, как и в других частях кода, поэтому я немного растерялся относительно того, в чем именно заключается проблема.

Он также имеетследующая ошибка в закрывающей скобке блока:

Control may reach end of non-void block

1 Ответ

0 голосов
/ 11 октября 2018

При дальнейшей проверке в блоке был экземпляр, в котором у меня было return nil; (я задним числом добавил код отправки)

Из-за этого оператора возврата XCode предполагал, что блок имеет возврат void *тип, который не соответствует ожидаемой подписи блока для dispatch_once, следовательно, ошибка в начале блока, а не там, где была проблема.

...