block的各种定义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了block的各种定义相关的知识,希望对你有一定的参考价值。

1、作为变量

//block 的申明,定义,调用,block快捷方式inline

//<#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {

//    <#statements#>

//};

//    blockName(parameters);

    

    //frist method

    void(^block1)() = ^{

        NSLog(@"调用了block1");

    };

    block1();

    //second method ,如果没有参数,参数可以隐藏,如果有参数,定义的时候,必须要写参数,而且必须要有参数变量名

    void(^block2)(int) = ^(int a){

        

    };

    block2(2);

    //third method ,block式右边定义返回类型可以省略,不管有没有返回值,都可以省略

    //没省略

    int(^block3)() = ^int{

        return 3;

    };

    block3();

    //省略

    int(^block4)(NSString *) = ^(NSString *b){

        return 4;

    };

    block4(@"hello");

 

2、作为属性


@property (nonatomic, copy) 返回值类型 (^block的名称)(参数类型);

@property (nonatomic, copy) returnType (^blockName)(parameterTypes);

3、作为方法声明的参数


- (void)方法名:(返回值类型 (^)(参数类型))block的名称;

- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;

4、作为方法实现的参数


[对象/类 方法名:^返回值类型 (参数) {...}];

[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];

5、作为typedef


typedef 返回值类型 (^类型名称)(参数类型);
类型名称 block的名称 = ^返回值类型(参数) {...};

typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};

以上是关于block的各种定义的主要内容,如果未能解决你的问题,请参考以下文章

block的各种定义

iOS学习之代码块(Block)

小程序各种功能代码片段整理---持续更新

ios block和delegate的区别

Sphinx - 在代码块片段中使用省略号 (...)

VSCode自定义代码片段——CSS选择器