Это небезопасно, но его можно использовать, если вы на 100% уверены, что не достигнете этого блока вне области действия функции / метода. В общем, такие хаки постоянно накладывают тонны технических обязательств на ваши плечи, поэтому они должны быть как минимум хорошо прокомментированы.
в порядке, но как насчет записи массивов C?
Учитывая эту упрощенную ситуацию:
CGPoint points[10];
[myArray forEachElementWithBlock:^(int idx) {
points[idx] = CGPointMake(10, 20); // error here
// Cannot refer to declaration with an array type inside block
}];
после поиска какое-то время нашел это возможное решение, чтобы поместить его в структуру:
__block struct {
CGPoint points[100];
} pointStruct;
[myArray forEachElementWithBlock:^(int idx) {
pointStruct.points[idx] = CGPointMake(10, 20);
}];
это будет работать, но есть небольшое ограничение, которое я должен создать динамически массив c:
int count = [str countOccurencesOfString:@";"];
__block struct {
CGPoint points[count]; // error here
// Fields must have a constant size: 'variable length array in structure' extension will never be supported
} pointStruct;
Как я могу получить доступ к моейCGPoint
массив вblock
?
ИЛИ ЖЕ
Это вообще возможно, или мне нужно переписать блочный метод, чтобы получить полную функциональность?