解决block内局部变量报错

2017-12-20  本文已影响0人  happycheng

变量报错:
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;
        }
        }];
上一篇下一篇

猜你喜欢

热点阅读