经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » iOS » 查看文章
2.Block实战
来源:cnblogs  作者:小小个子大个头  时间:2020/12/8 9:03:27  对本文有异议

2.Block实战

问题来自:iOS开发基础:开发两年的你也不会写的Block

  1. 声明一个Block,并调用它。
  2. 声明一个Block型的属性。
  3. 声明一个方法,接受一个Block型的参数,并写出调用时传入的Block实参。
  4. 实现一个Block的递归调用(Block调用自己)。
  5. 实现一个方法,将Block作为返回值。

1. 声明block,并使用

  1. // 返回值类型+(^block名)(参数列表) = ^返回值类型(参数列表){...};
  2. NSInteger (^sumBlock)(NSInteger, NSInteger) = ^NSInteger (NSInteger a, NSInteger b) {
  3. return a + b;
  4. };
  5. NSInteger sum = sumBlock(1, 2);
  6. NSLog(@"sum = %@", @(sum));

2.声明Block型的属性

  1. // 其实和局部变量的声明是相同的,注意使用copy
  2. @property (nonatomic, copy) NSString* (^appendStringBlock)(NSString *title);

3.Block类型的方法参数

相比于Block型的属性形式,只需要将^后面的block名提到最后即可

  1. // 返回值类型(^)(参数列表)block名
  2. - (void)declareAMethodWithBlock:(BOOL(^)(NSInteger index))callBackBlock {
  3. NSInteger idx = 0;
  4. while (callBackBlock(idx)) {
  5. NSLog(@"%@", @(idx));
  6. idx = idx + 1;
  7. }
  8. }
  9. // 方法调用
  10. [self declareAMethodWithBlock:^BOOL(NSInteger index) {
  11. return index < 10;
  12. }];

4.Block递归调用

  1. __block NSInteger number = 0;
  2. __block void (^calculateSum) (NSInteger) = ^void (NSInteger input) {
  3. number = input + 1;
  4. if (number >= 10) {
  5. calculateSum = nil;
  6. return;
  7. }
  8. calculateSum(number);
  9. };
  10. calculateSum(1);
  11. NSLog(@"%@", @(number));

5.Block作为返回值

  1. - (NSInteger (^) (NSInteger))returnBlockType {
  2. return ^ NSInteger (NSInteger a){
  3. return a * a;
  4. };
  5. }
  6. NSLog(@"%@", @([self returnBlockType](20)));

推荐一个网站

How Do I Declare A Block in Objective-C?,记不住block的时候可以参考一下

原文链接:http://www.cnblogs.com/4zjq/p/14024595.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号