Objective C中的只读int是什么?

19

我定义了一个整数变量来记录一个进程成功的次数。在我的代码外面,我声明:

int successes = 0

然后在我的循环中,我使用successes++; 来递增变量,这时候XCode会抱怨 "variable is not assignable (missing _block type specifier)"。

出了什么问题?为什么我不能递增这个整数变量? 我从未声明它是只读的...

非常感谢任何帮助。

我使用的代码是:

_block int successes = 0;

for(CLLocation *location in locationOutputArray)
{
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error)
     {
         if(placemarks && placemarks.count > 0)
         {
             successes++;
             CLPlacemark *topResult = [placemarks objectAtIndex:0];

             NSString *address = [NSString stringWithFormat:@"%@ %@,%@ %@", [topResult subThoroughfare],[topResult thoroughfare],[topResult locality], [topResult administrativeArea]];

             [addressOutputArray addObject:address];
             NSLog(@"%@",address);
         }

     }];

    [geocoder release];
}

你尝试过使用 __block int successes = 0; 吗?最好展示一下你的代码,因为很明显你正在使用块或其他你没有告诉我们的东西。 - jtbandes
请确认一下,这是一个多线程应用程序吗? - A. K.
2个回答

41

你的循环在一个块内部(使用 ^{...} 语法)。块无法在没有 __block 说明符的情况下更改块外变量。


哦!这样就更有意义了。我没意识到那种语法叫做块。我要如何声明它前面的块呢?"_block int successes = 0;" 会报错 "Use of undeclared identifier '_block'"。 - Mason
非常感谢!一旦SO允许,我会立即接受您的答案。 - Mason
2
非常感谢您使用双下划线注释;因为所使用的字体没有将下划线分开,我一直无法弄清楚自己做错了什么。 - RonLugge

11

您尝试在块内访问此int。请将其标记为__block,以便可以从块内更新。

块编程主题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接