美文网首页
解决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内局部变量报错

    变量报错:Variable is not assignable (missing __block type spe...

  • Block 的一些简单认识

    Block 与局部变量 block 可以捕获局部变量,在你声明 myBlock 后,因为需要在block 内使用了...

  • iOS中的Block访问变量使用注意问题

    一、Block内访问局部变量 a、在声明block后,调用block之前对局部变量修改,block里面扑获的值仍是...

  • Block

    Block内的变量: 一:局部变量 声明block之后,调用blcok之前,对局部变量进行修改,在调用block时...

  • Block详解

    __block说明符 Block只能保存局部变量瞬间的值,所以当我们尝试修改截获的自动变量值,就会报错。例如: 该...

  • iOS __block,__weak,__strong 的理解

    __block 在 block 里面可以访问局部变量,但是不能修改局部变量,这是因为当局部变量在 block 中使...

  • block

    一篇文章看懂iOS代码块Block - 简书 在Block中可以访问局部变量 Block内访问全局变量和静态变量 ...

  • Block返回nil报错

    解决一个使用Block遇到的坑 报错 *Incompatible block pointer types init...

  • __block和__weak区别

    1.Block可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int a ...

  • block与__block

    block内局部变量的修改 1.基本数据类型: 1)不使用__block修饰 代码: 运行结果: 结论:对于基本数...

网友评论

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

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