美文网首页
解决block内局部变量报错

解决block内局部变量报错

作者: happycheng | 来源:发表于2017-12-20 15:39 被阅读0次

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

    相关文章

      网友评论

          本文标题:解决block内局部变量报错

          本文链接:https://www.haomeiwen.com/subject/rxbgwxtx.html