почему __block не добавляет значения в массив - PullRequest
0 голосов
/ 26 апреля 2018

Я перечисляю диапазоны внутри блока и сохраняю значения внутри массива. Я ожидал, что с помощью __block следует хранить значения внутри блока в массиве?

 __block  NSMutableArray *array;
  [indexSet enumerateRangesUsingBlock:^(NSRange range,BOOL * stop ) {

    [array addObject:@(range.location)];
    [array addObject:@(range.length)];

     NSLog(@"location is %d, %ld", range.location, range.length);


}];


NSLog(@"%@",array );

Но этот результат в

местоположение 4, 2 местоположение 8, 2 местоположение 14, 2

и для массива

(нуль)

Я ожидал, что массив будет заполнен значениями.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

__ block NSMutableArray * array = [NSMutableArray array];

Работает нормально.

Однако, когда я объявил массив как свойство, блок стал избыточным.

0 голосов
/ 26 апреля 2018

Вы должны инициализировать его, только что объявленный массив: nil:

__block  NSMutableArray *array = [NSMutableArray array];

(компилятор Swift выдаст ошибку ... ?)

...