Несовместимые типы указателей блоков, отправляющие «void (^ _Nullable) (enum MyReturnCode)» параметру типа «void (^) (enum MyReturnCode)» - PullRequest
0 голосов
/ 20 февраля 2020

В Objective- C (Xcode 11.3.1) у меня есть два метода, получающих указатель блока в качестве аргумента:

- (void)showDialog:(void (^ _Nullable)(enum MyReturnCode returnCode))handler;

- (void)openFile:(void (^ _Nullable)(BOOL success))handler;

typedef NS_ENUM(NSUInteger, MyReturnCode)
{
    MyReturnCodeFirstOption,
    MyReturnCodeSecondOption
};

Методы вызываются следующим образом:

[self showDialog:^(enum MyReturnCode returnCode) {}];
[self openFile:^(BOOL success) {}];

Если я пытаюсь скомпилировать его, я получаю сообщение об ошибке на линии showDialog:

Incompatible block pointer types sending 'void (^ _Nullable)(enum MyReturnCode)' 
                    to parameter of type 'void (^)(enum MyReturnCode)'

Если я пытаюсь удалить _Nullable из определения метода, я получаю ошибку, когда оба равные части:

Incompatible block pointer types sending 'void (^)(enum MyReturnCode)'
                    to parameter of type 'void (^)(enum MyReturnCode)'

Вызовы метода openFile компилируются без проблем.

Почему я получаю ошибку при вызове showDialog? Почему не в openFile, где единственная разница - это тип возвращаемого значения обработчика? Как это исправить?

...