本文概要:
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);