关于iOS block传值的理解

1 篇文章 0 订阅

今天研究了一下iOS block的传值。

场景:

视图A跳转到视图B,当由B视图跳回视图A时,返回一些视图A需要的数据。


block使用时一般是在视图A中调用视图B中的一个方法,该方法的参数中包含block。

所以在视图B的.h文件中定义一个带有block参数的方法。(第一步)

- (void)callMyBlock:(TestBlock)block;//先不要管TestBlock是什么鬼,反正是一个参数的类型

既然在.h文件中定义了个方法,那么就应该在.m中实现这个方法吧。(第二步)

-(void)callMyBlock:(TestBlock)block {

    self.myBlock = block;//self.myBlock很明显是TestBlock类型的,不然怎么可以self.myBlock = block;

}

self.myBlock在视图B的.h中声明:

@property (nonatomic,copy)TestBlock myBlock;//上面的callMyBlock执行相当于将传进来的“block”存到这个变量中


现在在视图B中,可以拿到视图A传过来的block(代码块),这个block中写的什么,视图B肯定不知道啊,但是视图B知道block的格式。

现在在视图B中的.h头部定义一下TestBlock;(就算第三步吧,应该算第一步之前的)

typedef void (^TestBlock)(NSString *x) ;//block的名称:TestBlock,返回值:void,参数:NSString类型 x。


到现在为止一直还没有调用过这个block(代码块)呢。仔细想想,B中定义了一个block格式,定义了一个参数为这个格式的block,方法实现是存储这个传进来的block。所以一直没有使用这个block呢。

现在视图B中的myBlock是视图A传过来的block。

所以是不是应该拿着视图A中的block做点什么了。(第四步)

至于在哪里调用这个block,那就看你要在什么时候用咯。

self.myBlock(@"把这些传给视图A");


现在视图B中都弄完了。

在视图A中怎样取出这个“把这些传给视图A”呢?(第五步,调用视图B中定义的方法就可以了)


[viewB callMyBlock:^(NSString *x) {

        self.blockText.text = x;//这里的x 就是你在视图B中self.myBlock(@"把这些传给视图A");传的参数咯!!

    }];



到此已完成block传值。 over


其实 self . myBlock ( @" 把这些传给视图 A" ); 等于 [viewB callMyBlock:^(NSString *x) {

        self.blockText.text = x;

    }];


block比喻:

我有一条金鱼(数据)。

想要吗?你得给我我想要的鱼缸(我定义的block)。

怎么把鱼缸给我我肯定会告诉你啊,是顺丰邮,还是申通。(我定义的一个方法,参数是block)。

上面整个过程没问题了,你的鱼缸里就有鱼了。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值