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 <Foundation/Foundation.h>
//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);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 重点掌握 3 类对象和方法 对象就是一个物体 类的独特存在就是一个实例,对实例进行操作叫做方法。方法可以应用于类或...
    Coder大雄阅读 1,282评论 0 2
  • Objective-C 1. import的用法 拷贝文件内容可以自动防止文件的内容被重复拷贝(#define宏定...
    马文涛阅读 5,359评论 3 17
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,252评论 1 23
  • 昨晚睡眠不是很好,半夜两点多起来一次夜,后来又迷迷糊糊间断的起来一两次,不知道是因为心里有事,还是热的。六点半的闹...
    无名小鱼_7713阅读 140评论 0 0
  • 在Demo中集成Ijkplayer尝试拉取网络视频流进行播放时,发现拉取后出现视频无法全部在屏幕中播放,显示效果如...
    NullUser阅读 7,392评论 0 3