美文网首页
oc block在不同位置的写法格式

oc block在不同位置的写法格式

作者: gerrywanggang | 来源:发表于2022-03-06 11:46 被阅读0次

oc中的block在不同的位置存在很多变形, 经常容易搞晕,尤其是不经常使用block的小伙伴,想试用block, 但定义太复杂了,写不好就写不下去。
本文在使用block的几个地方梳理了一下, 如typedef, @property中, 方法内部定义一个临时的block, 作为函数形参, 作为函数实参等。

主要的格式如下

block的变量定义:

返回值类型(^block变量名)(参数1类型, 参数2类型,参数n类型...)

BOOL(^block3)(int, NSString *) 

block的实现(也就是block变量的值)格式:

^返回值类型(参数1类型, 参数2类型,参数n类型...) {
// 代码
}

^BOOL(int age, NSString * name) {
        NSLog(@"blockName: block3, age: %d, name: %@", age, name);
        return YES;
    };
BOOL(^block3)(int, NSString *) = ^BOOL(int age, NSString * name) {
        NSLog(@"blockName: block3, age: %d, name: %@", age, name);
        return YES;
    };

在property中的格式:

返回值类型(^block变量名)(参数1类型, 参数2类型,参数n类型...)
和定义在方法中的格式是一样的

@property (copy, nonatomic) BOOL(^block1)(int, NSString *);

在typedef中的格式:

返回值类型(^block类型名)(参数1类型, 参数2类型,参数n类型...)
就是把普通block变量类型定义的变量名的位置换成了类型名,注意类型名建议要大写

typedef void(^RequestResult) (int, NSDictionary *);
// 使用typedef定义的block
@property (copy, nonatomic) RequestResult block2;

block在形参中的使用格式:

(返回值类型(^)(参数1类型, 参数2类型,参数n类型...) )block变量名
在形参中的形式非常奇葩,和前面的格式相差较大。
可以看做是把普通block变量定义中的变量名拿出来, 然后整个添加一个(),然后把变量名放在后面。

- (void)testBlock: (BOOL(^)(int, NSString *))block {
    block(18, @"xiaoli");
}

block在是实参中的使用格式:

^返回值类型(参数1类型, 参数2类型,参数n类型...) {
// 代码
}
和block实现(值)的格式是完全一致的

[self testBlock:^BOOL(int age, NSString * name) {
        NSLog(@"blockName: func_block, age: %d, name: %@", age, name);
        return YES;
    }];

block的调用格式:

block变量名(实参1, 实参2, ...);

BOOL result1 = self.block1(18, @"block1");
    self.block2(18, @{@"url": @"https://www.baidu.com"});
    BOOL result3 = block3(18, @"block3");
    [self testBlock:^BOOL(int age, NSString * name) {
        NSLog(@"blockName: func_block, age: %d, name: %@", age, name);
        return YES;
    }];
    NSLog(@"result1: %d, result3: %d", result1, result3);

运行结果


image.png

DEMO Github地址:
https://github.com/gerrywg/blockDemo/tree/master

相关文章

  • oc block在不同位置的写法格式

    oc中的block在不同的位置存在很多变形, 经常容易搞晕,尤其是不经常使用block的小伙伴,想试用block,...

  • OC的block和Swift的闭包写法

    OC的block和Swift的闭包写法

  • iOS_Block

    block的本质其实就是OC对象, Block是oc的一段代码块,在需要的时候调用。 Block变量的声明格式为:...

  • OC block 写法

  • iOS开发——如何声明 block

    最近开发过程中经常需要声明一个 block 变量,由于声明位置不同,block 变量的写法是不同,尴尬,发现自己总...

  • Block

    常用写法: OC中: Swift中: 注意事项: block默认存储在栈中,如果对block进行copy操作,bl...

  • OC block 原理总结

    本文重点总结 OC block 的原理,并带上一些例子,不讨论 block 的写法和应用。 block 的本质总结...

  • Swift超基础语法(闭包篇)

    "闭包,Swift中的新概念,然而除了写法不同,实际上用法与用途都和OC中的Block没什么不同" 闭包 Swif...

  • 程序员面试闪充--Block

    1、介绍 Block是OC中非常重要的一种技术手段 2、从c函数和oc函数的区别来定义block C函数写法:in...

  • Swift---7.闭包

    闭包(与OC中的block相似)内联闭包写法{(para:type)... -> type in statemen...

网友评论

      本文标题:oc block在不同位置的写法格式

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