Block基础知识点的整理

//block声明:返回值(^block变量名)(参数)
void(^block)();

//block定义:三种方式 = ^(参数){};
//第一种
void(^block1)(void) = ^{
    NSLog(@"调用了block1");
};

//第二种:block 如果没有参数,参数可以隐藏,如果有参数,定义的时候,必须写参数,而且必须要有参数变量名
void(^block2)(int) =^(int a){
    
};
//第三种 block返回值可以省略,不管有没有返回值,都可以省略
int(^block3)(void) = ^{
    return 3;
};
//同上
int(^block4)(void) = ^int{
    return 3;
};

//block 类型:int(^)(NSString *)  返回值省略了
int(^block5)(NSString *) = ^(NSString *name){
    return 4;
};

//block 调用
block1();
block2(3);
block3();
block4();
block5(@"haha");

//场景1:在一个方法中定义,在另一个方法中调用 test调用

//BlockType 类型别名
typedef void(^BlockType)(void);

/**1,建立一个block 属性 练习 功能是传入一个String 输出一个String */
@property (nonatomic,strong)NSString *(^block1)(NSString *);

//定义一个block
    NSString *(^block)(NSString *)=^NSString *(NSString *a){
        NSString *str = [NSString stringWithFormat:@"打印++%@",a];
        NSLog(@"%@",str);
        return str;
    };
    //赋值保存为全局属性
    _block1 = block;

//调用block  对应第一个开发场景
- (IBAction)test:(id)sender {
    _block1(@"abc");
}


//场景2:在一个类中定义block,在另一个类中调用

1.创建一个模型
#import 
//BlockType 类型别名
typedef void(^BlockType)(void);
NS_ASSUME_NONNULL_BEGIN

@interface CallItem : NSObject
/** name */
@property (nonatomic,strong) NSString *name;

/** 动作 */
@property (nonatomic,strong) void(^block)(void);

//一样的定义block 同上
@property (nonatomic,strong) BlockType block2;

@property (nonatomic,strong) NSString *(^block3)(NSString *);


+ (instancetype)callItemWithString:(NSString *)name;
@end

NS_ASSUME_NONNULL_END

----------------------------------------
#import "CallItem.h"

@implementation CallItem
+ (instancetype)callItemWithString:(NSString *)name{
    CallItem *item = [[CallItem alloc]init];
    item.name = name;
    return item;
}
@end

//创建模型并且在block 中写入内容 并加入数组中
CallItem *item1 = [CallItem callItemWithString:@"111"];
    item1.block = ^{
        NSLog(@"tap1");
    };
    item1.block3 = ^NSString * _Nonnull(NSString * a) {
        NSLog(@"打印%@",a);
        return a;
    };
    CallItem *item2 = [CallItem callItemWithString:@"222"];
    item2.block = ^{
        NSLog(@"tap2");
    };
    CallItem *item3 = [CallItem callItemWithString:@"333"];
    item3.block = ^{
        NSLog(@"tap3");
    };
    
    [self.callItems addObject:item1];
    [self.callItems addObject:item2];
    [self.callItems addObject:item3];

//点击调用
- (IBAction)tap1:(UIButton *)sender {
    CallItem *item = self.callItems[0];
    item.block();
    item.block3(@"tap1");
}
- (IBAction)tap2:(UIButton *)sender {
    CallItem *item = self.callItems[1];
    item.block();
    
}
- (IBAction)tap3:(UIButton *)sender {
    CallItem *item = self.callItems[2];
    item.block();
}
//定义一个使用block返回参数的方法
- (void)post:(id)url params:(id)paramsDic model:(ResModel *)model finishCallbackBlock:(void (^)(NSString *, ResModel *))block{
    [self request:url Params:paramsDic model:model FinishCallbackBlock:^(NSString *error, ResModel *result) {
        block(error,result);
    } type:0];
}
/// 我的粉丝请求接口
/// @param currentPage 当前页
/// @param successBlock 成功回调
/// @param fail 失败回调
- (void)userFansQuery:(NSInteger)currentPage withSuccess:(void (^)(NSArray *_Nonnull fansList , CatPaginator *paginator))successBlock withFail:(nullable void(^)(void))fail;

最基本 使用:


//函数Block 回调
complete:(void(^)(void))complete;

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

//type 
typedef void(^xxBlock)(void);

@property (copy, nonatomic) void (^actionBlock)(void);

你可能感兴趣的:(Block基础知识点的整理)