变量报错:
Variable is not assignable (missing __block type specifier)
原因:缺少一个关键字双下划线block
解决方法:为block加上双下划线
当在block内部使用block外部定义的局部变量时,如果变量没有被__block修饰,则在block内部是readonly(只读的),
不能对他修改,如果想修改,变量前必须要有__block修饰
__block的作用告诉编译器,编译时在block内部不要把外部变量当做常量使用,还是要当做变量使用.
如果在block中访问全局变量,就不需要__block修饰.
//1法
__block int a =120;
@weakify(self);
_timer = [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
@strongify(self);
if (_timea>0) {
a = a-1;
}
}];
//2法
@weakify(self);
_timer = [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
@strongify(self);
int a =120; //a是内部变量,不会报错
if (a>0) {
a = a-1;
}
}];
网友评论