美文网首页
Block基础知识点的整理

Block基础知识点的整理

作者: Fade1992 | 来源:发表于2020-04-22 15:02 被阅读0次
    //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);
    
    

    相关文章

      网友评论

          本文标题:Block基础知识点的整理

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