У меня вопрос о синтаксисе переменных __block
. Я знаю, что вы можете использовать __block
для переменной в области видимости, чтобы она не была доступна только для чтения внутри блока. Однако в одном месте в яблочных документах я увидел альтернативу:
"Переменные в определяющей области по умолчанию используются только для чтения при использовании в блоке. Если вам нужно изменить значение такой переменной, вы можете использовать специальный синтаксис:
int count = 0;
float cumulativeValue = 0.0;
UpdateElements( a, N, ^(float element){
|count, cumulativeValue|
float value = factor * element;
++count;
cumulativeValue += value;
return value;
} );
В этом примере count и cumulativeValue изменяются внутри блока, поэтому они включаются в список разделенных переменных, разделенных запятыми, в начале области блока.
Этот синтаксис кажется намного более чистым, и я предполагаю, что вы могли бы затем изменить переменные, которые вы не объявляли, но все еще находятся в сфере видимости. Однако я не видел этого нигде, и компилятор xCode не любит мой основной блок. Является ли этот законный синтаксис?