Могу ли я объявить блок ObjC с помощью auto?
auto fun = ^(int x) { NSLog(@"%d", x); }
fun(5);
Я не могу выработать правильный синтаксис для этого.
Вам не хватает ;
после объявления fun
, В противном случае вы получите правильный синтаксис, и Clang примет это в -std=c++11 -fblocks
режим для ввода C ++ или Objective-C ++. (Обратите внимание, что блоки на самом деле являются ортогональным расширением, которое не является частью Objective-C.)
Я не думаю, что ключевое слово auto из C ++ / Objective-C ++ используется в Objective-C.
Что касается объявления блочной переменной для вашего примера, то в target-C будет работать следующее
void(^fun)(int x) = ^(int x) {
NSLog(@"%d",x);
};
fun(5);
Для большего количества опций объявления в блоке есть очень хороший ответ Вот
Ключевое слово auto — это ключевое слово c ++ 11. Objective-c является надмножеством c не c ++ и поэтому не содержит свойств c ++, а скорее c. Что касается Objective-C ++, я не верю, что Clang обновлен на все новые функции C ++ 11, особенно в компиляторе, который строит Objective-C ++. Надеюсь это поможет!