block之---应用场景:做参数和返回值
1.做参数
什么时候使用Block充当参数?
封装一个功能,这个功能做什么事情由外界决定,但是什么时候调用由内部决定,这时候就需要把Block充当参数去使用.
模拟需求:
封装一个计算器,怎么计算由外界决定,什么时候计算由内部决定
// 声明计算器类
@interface CaculatorManager : NSObject
@property (nonatomic, assign) int result;
// 声明方法:参数为block类型
- (void)caculator:(int(^)(int result))caculatorBlock;
@end
******************************************************
// 实现计算器类
@implementation CaculatorManager
// 实现方法
- (void)caculator:(int (^)(int))caculatorBlock
{
// 调用block
_result = caculatorBlock(_result);
}
******************************************************
// 使用计算器类
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 创建类
CaculatorManager *mgr = [[CaculatorManager alloc] init];
// 使用方法,传入自定义的block
[mgr caculator:^(int result){
result += 5;
result *= 5;
return result;
}];
NSLog(@"%d",mgr.result);
}
@end
2.做返回值
模拟需求:
封装一个计算器,实现加法计算,在外部使用加法方法时可以实现链式编程。
// 声明计算器类
@interface CaculatorManager : NSObject
@property (nonatomic, assign) int result;
// 声明加法方法:返回值为block类型
- (CaculatorManager *(^)(int))add;
@end
******************************************************
// 实现计算器类
@implementation CaculatorManager
// 实现方法
- (CaculatorManager * (^)(int))add
{
// 返回加法计算的block,并且block的返回值为计算器类
return ^(int value){
_result += value;
return self;
};
}
******************************************************
// 使用计算器类
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 创建类
CaculatorManager *mgr = [[CaculatorManager alloc] init];
// 使用链式编程的方式调用方法
mgr.add(5).add(6).add(7);
NSLog(@"%d",mgr.result);
}
@end
block之---应用场景:做参数和返回值的更多相关文章
- python函数进阶(函数参数、返回值、递归函数)
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
- python中函数的参数和返回值
目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...
- 2. Bean Validation声明式校验方法的参数、返回值
你必须非常努力,才能干起来毫不费力.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...
- java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)
这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还 ...
- C#多线程函数如何传参数和返回值
详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统. C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...
- Android JNI 自定义对象为参数和返回值
ndroid JNI 提供了很强大的支持,不仅可以采用基本类型做为参数和返回值,同时也支持自定义对象做为参数和返回值,以下举例说明. 一.定义作为输入和返回的自定义类 (仅提供两个简单类型和一个打印函 ...
- JS基础研语法---函数基础总结---定义、作用、参数、返回值、arguments伪数组、作用域、预解析
函数: 把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用: 代码重用 函数的参数: 形参:函数定义的时候,函数名字后面的小括号里的变量 实参:函数调用的时候,函数名 ...
- day09-Python运维开发基础(函数收集参数、命名关键字参数与返回值、函数名的特殊使用及 全局/局部变量详解)
1. 函数收集参数.命名关键字参数与返回值.函数名的特殊使用 # ### 默认形参 和 关键字实参 # 默认形参和 关键字实参 在写法上是一样 # 函数的定义处 """默 ...
- 匿名对象作为方法的参数和返回值与Random概念和基本使用
应用场景 1. 创建匿名对象直接调用方法,没有变量名. new Scanner(System.in).nextInt(); 2. 一旦调用两次方法,就是创建了两个对象,造成浪费,请看如下代码. new ...
随机推荐
- 《算法导论》习题2.3-5 二分搜索 Binary Search
地球人都知道“二分查找”,方法也非常简单,但是你能不能在10分钟内写出一个没有bug的程序呢? 知易行难,自己动手写一下试一试吧. public class BinarySearch { public ...
- pcommlite串口通讯库使用
MFC下串口编程使用最多的两种方法是读取注册表和使用mscomm组件,都有着或多或少的缺陷,调用系统SDK比较麻烦,而MSCOMm组件最多支持16个串口,串口号大于16的时候无法打开,遇到这种情况,可 ...
- 怎样简单的制作一个CHM格式的帮助文档?
http://jingyan.baidu.com/article/d8072ac446eb7bec95cefd0e.html 怎么制作CHM格式电子书 http://jingyan.baidu.com ...
- SQL Server数据库备份方法
数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段.一个合理的数据库备份方案,应该能够在数据丢失时,有效地恢复重要数据,同时需要考虑技术实现难度和有效地利用资源. 数据库 ...
- jade的特点
jade特点 1超强的可读性 2灵活易用的缩进 3块扩展 4代码默认进过编码处理,以增强安全性 5编译及运行时的上下文错误报告 6命令行编译支持 7html5模式(使用 !!!5文档类型) 8可选的内 ...
- C#常用网址
C# 编程指南 https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx
- [Angular Tutorial] 9 -Routing & Multiple Views
在这一步中,您将学到如何创建一个布局模板,并且学习怎样使用一个叫做ngRoute的Angular模块来构建一个具有多重视图的应用. ·当您现在访问/index.html,您将被重定向到/index.h ...
- arcgis_server_address_note
arcgis server api下载地址 https://developers.arcgis.com/downloads/ 先前版本的帮助 http://resources.arcgis.com/z ...
- 用编程的方式定义UI界面
package com.example.administrator.test_hello_world; import android.app.Activity; import android.os.B ...
- 各种浏览器开启JavaScript脚本方法
各种浏览器开启JavaScript脚本方法 随着网站设计技术的发展,为了用户友好体验,大部分网站使用了JavaScript脚本设计,如果您的浏览器禁用或关闭的JavaScript支持,那么可能造成网站 ...