#objective-c #xcode #function #lambda #objective-c-blocks
#objective-c #xcode #функция #лямбда #objective-c-блоки
Вопрос:
Я начал изучать, как использовать блоки / функции / лямбда в Objective-C. Но я не могу заставить его работать с объектами. Возможно, мне не хватает какого-то указателя, но он не работает, однако я делаю. На данный момент это мой код:
MyEventArgs (^skapaEventArg)(Operation);
skapaEventArg = ^(Operation a) { return *[[MyEventArgs alloc] initWithOperation:a]; };
MyEventArgs *a = skapaEventArg(Add);
Но я получаю ошибку, показанную на этом рисунке:
Если я сделаю
MyEventArgs a = skapaEventArg(Add);
чтобы поместить его в стек, Xcode выдает мне обычную «Интерфейс не может быть статически выделен» -ошибка
Как мне заставить этот простой код работать, используя блоки?
Ответ №1:
Это должно быть:
MyEventArgs *(^skapaEventArg)(Operation);
skapaEventArg = ^(Operation a) { return [[MyEventArgs alloc] initWithOperation:a]; };
MyEventArgs *a = skapaEventArg(Add);
Обратите внимание на *
в первой строке и его отсутствие во второй строке.
Комментарии:
1. Ах! Спасибо. Я знал, что с моими указателями что-то не так. Это была одна из тех комбинаций, которые я не пробовал. Но я понимаю, почему. Возврат должен быть указан как указатель в объявлении.
Ответ №2:
return *[[MyEventArgs alloc] initWithOperation:a];
Я думаю, вы получаете ошибку «несовместимый тип», потому что вы возвращаете указатель с разыменованием.