Трабл с блоком, iOS

Я получаю эту ошибку при попытке определить и назначить блок:

int (^bl)(int) = ^(int k)
{
    [_self c2:k]; // incompatible block pointer types initializing 'int (^)(int)' with an expression of type 'void (^)(int)'
};

Это из учебника блоков:

Что здесь происходит?

1 ответ

Решение

Изменить тип возврата bl от int в void,

void (^bl)(int) = ^(int k) {
    [_self c2:k];
};

Если вы посмотрите на спецификацию языка для блоков, вы увидите, что происходит:

Тип возврата является необязательным и выводится из операторов возврата. Если оператор возврата возвращает значение, все они должны возвращать значение одного типа. Если значение не возвращено, выведенный тип блока является недействительным; в противном случае это тип возвращаемого значения оператора.

В примере с яблоками тип возвращаемого значения будет типом num * multiplier который int соответствие возвращаемого типа блочной переменной myBlock,

Но в вашем случае нет return заявления, так что тип возвращаемого значения будет void который не соответствует типу возвращаемого значения переменной блока bl,

Другие вопросы по тегам