美文网首页
OC定义Block的四种形式

OC定义Block的四种形式

作者: 大成小栈 | 来源:发表于2021-08-19 17:32 被阅读0次

脱离Xcode直接手写一个Block,很多时候还真不一定每次都写得对。
常用定义形式共有以下几种:

// 宏定义Block
typedef NSString* (BlockName)(NSString *param1, NSString *param2);
BlockName block = ^NSString* (NSString *param1, NSString *param2){
    ...
    return...
};

// 声明一个局部Block
NSString * (BlockName)(NSString *param) = ^ NSString* (NSString *param){
    ...
    return...
};

// 声明一个Block属性变量
@property (nonatomic, copy)  NSString * ( ^BlockName )(NSString *param1, NSString *param2);

// Block作为方法的入参数
- (void) someMethodThatTakesBlock:( NSString * (^)(NSString *param) )block;

// Block作为方法的回调对象
[someObj someMethodThatTakesBlock: ^ (NSString *param){
    ... 
    // void型block,无返回值
}];

链式调用中的block:

//// .h
@interface CustomView : UIView

+ (CustomView *)initCustomView:(void(^)(CustomView *custom))block;

- (CustomView *(^)(CGRect))viewFrame;
- (CustomView *(^)(UIColor *))viewColor;

@end

//// .m
@implementation CustomView

+ (CustomView *)initCustomView:(void (^)(CustomView * _Nonnull))block {
    
    CustomView *custom = [[CustomView alloc] init];
    
    if (block) {
        block(custom);
    }
    return custom;
}

- (CustomView *(^)(CGRect))viewFrame {

    CustomView *(^frameBlock)(CGRect frame) = ^CustomView *(CGRect frame){
        self.frame = frame;
        return self;
    };
    
    return frameBlock;
    
    
    return ^CustomView *(CGRect frame){
        self.frame = frame;
        return self;
    };
}

- (CustomView *(^)(UIColor *))viewColor {
    return ^CustomView *(UIColor *color){
        self.backgroundColor = color;
        return self;
    };
}
@end

相关文章

  • OC定义Block的四种形式

    脱离Xcode直接手写一个Block,很多时候还真不一定每次都写得对。常用定义形式共有以下几种: 链式调用中的bl...

  • 【Swift】Swift中调用oc的block(block参数形

    注意本文章讲的不是正常的oc block调用,是block以参数形式存在于oc被调用 oc中定义方法A - (id...

  • iOS Block本质笔记

    OC中定义block block访问外部参数 OC转C++分析 block的变量捕获机制 为了保证block能够正...

  • Objective-C 基础之— Block本质+源码剖析

    block 又称之为“自带变量的匿名函数”,抛开OC语法定义block的形式不谈,其实好多语言都有类似的函数,比如...

  • iOS ---block

    block是封装了函数调用和调用环境的oc对象 (一)block的三种形式 block有三种形式,全局block、...

  • block(一)了解block

    block就是代码块组成的匿名函数,block是oc对于闭包的实现 1.可以嵌套定义,定义block方法和定义函数...

  • Swift 闭包(二)

    OC Block 和 Swift 闭包相互调用 我们在 OC 中定义的 Block,在 Swift 中是如何调用的...

  • OC Block 定义

    作为参数 (void)pingSingleWithHost:(NSString *)host block:(voi...

  • swift学习之闭包

    闭包和oc中的block非常相似,OC中的block非常像匿名的函数,闭包是用来定义函数(方法的)。作用: blo...

  • Objective-C Block底层原理

    Block的内存结构 在苹果官方文档中,给出了block的结构体定义: Block是如何捕获参数的: OC代码如下...

网友评论

      本文标题:OC定义Block的四种形式

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