为常用的块类型创建typedef

本文概要:

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);
原文地址:https://www.cnblogs.com/cchHers/p/8919421.html