美文网首页
Block作为属性、参数使用

Block作为属性、参数使用

作者: 114105lijia | 来源:发表于2019-06-14 11:42 被阅读0次

做开发这么久,总结了block常用的3个场景:

1.属性传值;
2.作为参数回调传值;
3.作为参数产值,等待其他操作后在进行回调。(这个用的比较少,但是也有不少场景需要用到。比如请求数据时,必须先等数据请求回来后在进行回调;再比如保存图片到相册,也必须等保存成功后在进行回调告知用户是否保存成功。。)

下面做了一个小demo,直接上代码:
ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController


@end

ViewController.m

#import "ViewController.h"
#import "TestViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.navigationItem.title = @"first";
    
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(100, 100, 100, 44);
    [self.view addSubview:btn];
    btn.backgroundColor = [UIColor yellowColor];
    [btn addTarget:self action:@selector(next) forControlEvents:UIControlEventTouchUpInside];
}

- (void)next {
    TestViewController *vc = [TestViewController new];
    [self.navigationController pushViewController:vc animated:YES];
    
    vc.propertyBlock = ^(NSInteger index) {
        NSLog(@"property---%ld",index);
    };
    
    [vc setBaseIndex:5 withBackBlock:^(NSInteger index) {
        NSLog(@"directly---%ld",index);
    }];
    
    [vc afterBackblock:^(NSInteger index) {
        NSLog(@"after---%ld",index);
    }];
}

@end

TestViewController.h

#import <UIKit/UIKit.h>

typedef void(^BackBlock)(NSInteger index);
typedef void(^PropertyBlock)(NSInteger index);

NS_ASSUME_NONNULL_BEGIN

@interface TestViewController : UIViewController

@property (nonatomic, copy) BackBlock backBlock;

//属性回调
@property (nonatomic, copy) PropertyBlock propertyBlock;

//作为参数回调
- (void)setBaseIndex:(NSInteger)index withBackBlock:(BackBlock)block;

//等待其他操作,操作结束后在返回block
- (void)afterBackblock:(BackBlock)block;

@end

NS_ASSUME_NONNULL_END

TestViewController.h

#import "TestViewController.h"

@interface TestViewController ()

@end

@implementation TestViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.navigationItem.title = @"测试";
    
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(100, 100, 100, 44);
    [self.view addSubview:btn];
    btn.backgroundColor = [UIColor redColor];
    [btn addTarget:self action:@selector(dodo) forControlEvents:UIControlEventTouchUpInside];
    
    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
    btn1.frame = CGRectMake(100, 300, 100, 44);
    [self.view addSubview:btn1];
    [btn1 setTitle:@"返回" forState:UIControlStateNormal];
    [btn1 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    btn1.backgroundColor = [UIColor yellowColor];
    [btn1 addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
}

- (void)back {
    if (self.propertyBlock) {
        self.propertyBlock(1);
    }
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)dodo {
    if (self.backBlock) {
        self.backBlock(5);
    }
}

- (void)afterBackblock:(BackBlock)block {
    self.backBlock = block;
}

- (void)setBaseIndex:(NSInteger)index withBackBlock:(BackBlock)block {
    NSInteger t = index * index;
    block(t);
}

@end

相关文章

  • Block作为属性、参数使用

    做开发这么久,总结了block常用的3个场景: 下面做了一个小demo,直接上代码:ViewController....

  • 工作心得:Block

    block的几种使用方式: blcok**作为类的属性 ** blcok**作为方法参数替代代理的实现 ** 当然...

  • block作为属性,作为参数,作为返回值各种情况演示

    block作为属性,作为参数,作为返回值各种情况演示

  • Block的用法

    1.block作为属性 写法1:typedef声明block名称 写法2:直接书写 2.block作为参数 写法:...

  • block、delegate作为属性使用

    Block作为属性的时候,使用copy delegate作为属性的时候,使用weak

  • block使用方法

    block基本使用 没有参数,=左边的()里面要写上void。 作为方法的参数传递使用 怎么区分参数是block?...

  • iOS开发中将block作为参数、属性使用

    开发中使用block进行回调传递消息、传递参数还是很方便的。 使用场景 1.使用一个网络请求工具进行某个页面的网络...

  • RAC

    初识RAC block的简单使用 block的三种用途 第一种用法,作为对象的属性 第二种用法,作为方法的参数 第...

  • Objective-C Block(1)使用

    概述: 作为参数使用 方法内部使用 全局声明使用 Block操作外部变量 作为参数使用 方法内部使用 全局声明使用...

  • iOS RAC的铺垫block

    你真的会用block吗? 在强化一下: 1.block作为对象的属性 2.block 作为方法的参数 3.bloc...

网友评论

      本文标题:Block作为属性、参数使用

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