美文网首页
第38条:为常用的块类型创建typedef

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

作者: MrSYLong | 来源:发表于2018-10-14 21:54 被阅读3次

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

    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。

    相关文章

      网友评论

          本文标题:第38条:为常用的块类型创建typedef

          本文链接:https://www.haomeiwen.com/subject/pentzftx.html