解决block内局部变量报错

变量报错:
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;
        }
        }];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。