第38条:为常用的块类型创建typedef

每个块都具备其“固有类型”,因而可将其赋给适当类型的变量。这个类型由块所接受的参数及其返回值组成。

int (^variableName) (BOOL flag, int value) = ^(BOOL flag, int value) {
    return value + 1;
};

块类型语法:

return_type (^block_name) (parameters)

为隐藏复杂的块类型,用C语言中“类型定义”的特性,typedef关键字给类型起个易读的别名。

typedef int (^EOCSomeBlock) (BOOL flag, int value);

上面是向系统中新增一个名为EOCSomeBlock的类型。

// 使用新类型
EOCSomeBlock block = ^(BOOL flag, int value) {
    return value + 1;
};

使用块的API:

- (void)startWithCompletionHandler:(void (^)(NSData *data, NSError *error))completion;

使用typedef修改后:

typedef void(^EOCCompletionHandler)(NSData *data, NSError *error);

- (void)startWithCompletionHandler:(EOCCompletionHandler)completion;

好处:重构块的类型签名是会很方便。修改后,凡是使用了这个类型定义的地方,都会无法编译,报同一种错误,不会导致修改造成的遗漏。

使用typedef定义新类型时应遵从现有的命名习惯,无使其名称与别的类型相冲突。

块的签名相同,用途不同,不妨为同一个块签名定义多个类型别名。如果要重构的代码使用了块类型的某个别名,那么只需修改相应typedef中的块签名即可,无须改动其他typedef。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容