Block 之传值

传值流程:

  1. 定义一个 block
  2. 在A实例中,传值给 block
  3. 在B实例中,实现block,获取到值

.h文件

// 定义 block 的形式
typedef void (^GetNameBlock)(NSString *name);

@interface Son : Father

@property (nonatomic, copy) GetNameBlock aBlock;

- (void)dothing;
- (void)getValue:(GetNameBlock)nameBlock;

@end

.m文件

- (void)dothing
{
    // 传值给 block
    if (_aBlock) {
        _aBlock(@"kim");
    }
  
}
// 把实现的 block 传过来了
- (void)getValue:(GetNameBlock)nameBlock
{
    _aBlock = nameBlock;
}

第一种形式:直接实现 block 传值

ViewController 的.m文件

// 实现 block
    _son.aBlock = ^(NSString *name) {
        NSLog(@"****小孩的名字 %@ ****",name);
    };

第二种形式:变相实现 block 传值

    _son = [[Son alloc] init];

// 变相实现 block
    [_son getValue:^(NSString *name) {
        NSLog(@"****小孩的名字 %@ ****",name);
    }];
// 事件
    [_son dothing];

附件(完整的.h文件 和 .m文件)

完整的.h文件

#import "Father.h"


# pragma mark - 协议
@protocol careChild <NSObject>

- (void)care:(NSString *)name;

@end

// 定义 block 的形式
typedef void (^GetNameBlock)(NSString *name);

@interface Son : Father

@property (nonatomic, weak) id<careChild> delegate;
@property (nonatomic, copy) GetNameBlock aBlock;


- (void)dothing;
- (void)getValue:(GetNameBlock)nameBlock;

@end

完整的.m文件

#import "Son.h"

@implementation Son

- (void)dealloc {

//    NSLog(@"%@", @"Son销毁了");

}

- (id)init
{
    self = [super init];
    if (self) {
//        NSLog(@"%@", NSStringFromClass([self class]));
//        NSLog(@"%@", NSStringFromClass([super class]));
    }
    return self;
}


- (void)dothing
{
    // 传值给 block
    if (_aBlock) {
        _aBlock(@"kim");
    }
    
    /*
     传值给 delegate
     
     [self.delegate care:@"kim"];

     */
}

// 把实现的 block 传过来了
- (void)getValue:(GetNameBlock)nameBlock
{
    _aBlock = nameBlock;
}

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

推荐阅读更多精彩内容

  • iOS开发中,页面传值是很常见的,但是页面传值你究竟知道多少呢?笔者这篇文章就是给大家介绍一下页面传值的具体方式,...
    蒲公英少年阅读 2,186评论 10 44
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,217评论 30 472
  • 前言 ios4.0系统已开始支持block,在编程过程中,block被Obj-C看成是对象,它封装了一段代码,这段...
    GitHubPorter阅读 816评论 2 4
  • 这段时间,家里的老人旁敲侧击地说了好几次这样的话:“恩恩忒内向了,不爱和小朋友们玩”,以及“恩恩好胜心太强了,赢了...
    茉莉大大阅读 185评论 0 0