本文概要:

1、块类型的语法结构

2、使用C语言中的“类型定义”的特性。使用typedef关键字用于给块类型起个别名

3、使用typedef好处之一是,重构块的类型签名时只需要改一处就行了,避免遗留bug

4、使用typedef技巧之一是,给同一块签名类型创建数个别名,方便让其他开发人员理解用途

5、对块进行类型定义时,命名规则

6、使用举例


一、块类型的语法结构

returnType(^name)(arguments);

比如:

void(^WSFActivityListSelectedBlock)(NSString *selectedId)

二、使用C语言中的“类型定义”的特性。使用typedef关键字用于给块类型起个别名

比如:

typedef void(^WSFActivityListSelectedBlock)(NSString *selectedId);

三、使用typedef好处之一是,重构块的类型签名时只需要改一处就行了,避免遗留bug

比如,现在需要添加一个selectedName参数,只需要在上面修改,然后其他使用到这个类型的地方IDE自然会报错,然后一个一个去修改就好了。

typedef void(^WSFActivityListSelectedBlock)(NSString *selectedId, NSString *selectedName);

四、使用typedef技巧之一是,给同一块签名类型创建数个别名,方便让其他开发人员理解用途

比如下面这两个块类型,所定义的签名是相同的。可以统一使用一个名字就可以了(比如:WSFActivityListHandledBlock),但是这么做的话,块与参数的用途看上去就不那么明显了。

typedef void(^WSFActivityListSelectedBlock)(NSString *selectedId, NSString *selectedName);
typedef void(^WSFActivityListDeletedBlock)(NSString *deletedId, NSString *deletedName);

五、对块进行类型定义时,命名规则

typedef void(^WSFActivityListSelectedBlock)(NSString *selectedId);

1、最好在使用块类型的类中定义,并且跟定义协议方法一样,将类名作为块类型名的前缀。

2、名字后半部分用能描述其用途的语句描述。

3、既然是类型名称,首字母肯定是要大写的。

六、使用举例

1、块类型的定义

typedef void(^WSFActivityListSelectedBlock)(NSString *selectedId, NSString *selectedName);

2、块对象的声明

@property (nonatomic, copy) WSFActivityListSelectedBlock selectedBlock;

3、块对象的定义

self.selectedBlock = ^[(NSString *selectedId, NSString *selectedName) {
NSLog(@"~~~~~~~~~~%@", selectedId);
NSLog(@"~~~~~~~~~~%@", selectedName);
};

4、块对象的调用

self.selectedBlock(self.currentId, self.currentName);

为常用的块类型创建typedef的更多相关文章

  1. 常用代码块:创建httpclient 2

    HttpGet httpGet = new HttpGet(url);SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(ne ...

  2. 常用代码块:创建httpclient

    HttpGet httpGet = new HttpGet(url); SSLContext sslcontext = SSLContexts.custom() .loadTrustMaterial( ...

  3. vs2015常用代码块与自定义代码块

    常用代码块 代码段名 描    述 #if 该代码段用#if和#endif命令围绕代码 #region 该代码段用#region和#endregion命令围绕代码 ~ 该代码段插入一个析构函数 att ...

  4. django的Model 模型中常用的字段类型

    常用的字段类型: AutoField:自增长字段,通常不用,如果未在Model中显示指定主键,django会默认建立一个整型的自增长主键字段 BooleanField:布尔型,值为True或False ...

  5. 转:C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、Sort)

    C#常用的集合类型(ArrayList类.Stack类.Queue类.Hashtable类.Sort) .ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在Array ...

  6. struts2 Result Type四个常用转跳类型

    Result的四个常用转跳类型分别为 Dispatcher 用来转向页面,是Struts的默认形式 Redirect   重定向到一个URL Chain  用来处理Action链 RedirectAc ...

  7. c#中常用的异常类型

    c#中异常捕获catch{}常用的异常类型 Exception 类   描述 SystemException 其他用户可处理的异常的基本类  ArgumentException 方法的参数是非法的  ...

  8. 框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解)

    框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解) 通过昨天的讲解,我们已经理解了运行时类型识别是什么. 比如  CObject * pthis = (Cobject *)Cre ...

  9. ORACLE常用数据库字段类型

    ORACLE常用数据库字段类型   常用的数据库字段类型如下:   字段类型 中文说明 限制条件 其它说明  CHAR 固定长度字符串 最大长度2000 bytes     VARCHAR2 可变长度 ...

随机推荐

  1. js兼容安卓和IOS的复制文本到剪切板

    1.在做点击按钮复制功能时遇到了小小的卡顿,此处遇到了两种系统手机的兼容性 / 复制后会对文本进行选中 / 输入法弹出 等.现将方法进行总结,如下代码很好对解决了以上问题,适用性强. 2.在文本此处使 ...

  2. python二维数组的创建

    话不多说,代码伺候 m = [[]*]*3 #创建一个3行5列的二维数组 m[][]= print(m) 输出结果为: 分析: m = [[0]*5]*3只是指向三个空列表的引用. 创建一个二维数组的 ...

  3. 5_1 大理石在哪儿(UVa10474)<排序与查找>

    Raju和Meena喜欢玩弹珠,他们有许多上面有号码的弹珠.一开始时,Raju按照弹珠上面的号码由小到大排成一列,然后Meena会要求Raju找出某个号码的第一颗弹珠所在的位置.她会算1…2…3…,如 ...

  4. python 解释器声明 unix #!/usr/bin/env python

    python 解释器声明 unix #!/usr/bin/env python 1. 问题的开始在代码移植到unix平台后,部分应用在运行时报如下错误:subprocess.Popen():OSErr ...

  5. HDU3173 Dominos

    单向并查集,问至少给几个点可以遍历全图,连通块数量n,入度为0的点的数量m,取max(n,m)~ #include<cstdio> #include<algorithm> #i ...

  6. ETCD的常用命令

    Note that any key that was created using the v2 API will not be able to be queried via the v3 API. A ...

  7. IPSec的高可用性技术

    IPSec VPN的高可用性技术:①.DPD(Dead Peer Detection)对等体检测                      ——旨在检查有问题的IPSec VPN网络,并快速的切换到备 ...

  8. Cisco AP-Sniffer模式空口抓包

     第一步:WLC/AP侧 配置AP为sniffer模式: 配置提交后,AP会重启,并且将不能发出SSID为clients提供服务. 第二步:一旦AP重新加入WLC,配置AP抓取的信道和抓取后的数据包发 ...

  9. MQTT.js browser node 均支持

    npm - mqtt 官网手册 https://www.npmjs.com/package/mqtt#weapp 简书用户 使用笔记 https://www.jianshu.com/p/4fd95ca ...

  10. 比较器Comparable Comparator

    一. Comparable Comparable 是排序接口,若一个类实现了 Comparable 接口,就意味着该类支持排序.实现了Comparable 接口的类的对象的列表或者数组可以通过 Col ...