Трабл с блоком, 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
,