Mam pytanie dotyczące składni zmiennych __block
. Wiem, że możesz używać __block
dla zmiennej w zasięgu, więc nie jest ona tylko do odczytu wewnątrz bloku. Jednak w jednym miejscu w apple docs, widziałem alternatywę.Alternatywna składnia do __block?
„Zmienne w zakresie określającym są tylko do odczytu domyślnie podczas stosowanego w bloku Jeśli trzeba zmienić wartość takiej zmiennej, ty można użyć specjalnej składni:
int count = 0;
float cumulativeValue = 0.0;
UpdateElements(a, N, ^(float element){
|count, cumulativeValue|
float value = factor * element;
++count;
cumulativeValue += value;
return value;
});
w tym przykładzie, liczyć i cumulativeValue są modyfikowane wewnątrz bloku, więc są one wliczone w oddzielonych przecinkami lista wspólnych zmiennych na początku zakresu bloku.
Ta składnia wydaje się być dużo czystsza i zakładam, że można wtedy zmodyfikować zmienne, które nie zostały zadeklarowane, ale nadal są w zakresie. Jednak nie widziałem tego nigdzie indziej, a kompilator xCode nie lubi mojego podstawowego bloku. Czy jest to prawidłowa składnia?
Bardzo ciekawe! Dzięki za historię –
Więc, jakikolwiek pomysł, dlaczego dokumentacja została napisana przed sformalizowaniem składni? – CodaFi
Jeśli ludzie dokumentujący nie potrafią wymyślić, jak wyjaśnić coś spójnie, jest to pewny znak, że projekt jest poważnie wadliwy, a zatem są one zaangażowane na wczesnym etapie procesu projektowania. Ta dokumentacja mogła być pierwotnie wyprodukowana dla WWDC, gdzie bloki zostały po raz pierwszy ogłoszone. – bbum