В 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
, где единственная разница - это тип возвращаемого значения обработчика? Как это исправить?