iOS --- block的一些使用方法(反向传值)

最近有个朋友问我iOS中的block 是怎么用的,

我根据自己的所学把实际应用的一些写法告诉他了

因为我觉得这个主要是更注重实用性,

好了废话不多说,直接上实际的



------

实际上使用 通常是进行  block 传值,A 页面--> B页面 如果是正向的话,那么我们把B页面的值传给A就叫做 反向传值(或者叫做回调)。

步骤:


1. 谁发送消息,谁就写block(同代理的使用)

#import <UIKit/UIKit.h>

typedef void(^myBlock)(NSString *str);


@interface DetailViewController : UIViewController

// 生成一个 block 属性
@property(nonatomic, copy) myBlock block;

@end

2.在B.m 文件中进行传值--- 当B页面要消失的时候,调用自己的block传值

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 调用 自己的block 给它传入一个 实参
    NSString *str = @"你好我是detail页面传入的字符串";

    // block 是基于C语言的函数,直接传参调用<具体的实现在消息的接收方A>
    self.block(str);
    
    [self dismissViewControllerAnimated:YES completion:^{
        
    }];
}


3. 就是在 A页面,接收B页面传过来的值了 ----- < 在创建B页面类实例的时候,进行实现 b.block 接收它传入的参数>

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    DetailViewController *detail = [[DetailViewController alloc] init];
   
    // 直接调用 detail的 block 实现
    detail.block = ^(NSString *str){
    
        // 打印传进来的 str
        NSLog(@"str :%@",str);
    
    };
    
    // 跳转到 detail页面
    [self presentViewController:detail animated:YES completion:^{
        
    }];
}

---------------------------- 这就是 Block 语法使用的 3部曲 了--------------------

怎么样是不是很简单??

下面看看效果图把







============后延==========

Block的一些小定义,估计懂了上面已稍微一看就懂了,仅供参考

1.block可以用来保存一段代码,或者用来封装一段代码。--->代码段,代码块。

2.block的标志是^

3.block跟函数很像 (其实它就是C语言函数)

     可以保存代码;

     可以有返回 值;

     也可以有行参;

     调用方式一样;

4.定义一个block

     #pragma mark 不带参数的block

     void (^outputblock)() = ^{

     NSLog(@"------------");

     };

     outputblock();

     }


5.带行参的block

     #pragma mark - 带参数的block

     int (^sumblock)(int, int) = ^(int a,int b){

     return a+b;

     };

     int sum = sumblock(3,13);

     int sum1 = sumblock(1,2);

     NSLog(@"%d",sum1);

     NSLog(@"%d",sum);


    #pragma mark - 输出n条横线

   // Block的 声明和实现

    void(^myblock)(int) = ^(int n){

    for (int i = 0; i < n; i++) {

    NSLog(@"-----------------");

    }
    };

  //block 的调用

   myblock(10);


6.如果block没有行参,可以省略后边的小括号。

7.使用typedef来定义一个block的类型

      typedef int(^Myblock)(int,int);

      Myblock sumblock = ^(int a,int b){

      return a+b; 

      }

      Myblock minus = ^(int a,int b){

      return a-b;

      }

8.block可以访问外边的变量,也可以修改外部的局部变量

    必须提前声明

    例如  __block int a = 5;

    用 __block 修饰过的变量  可以在调用 Block的时候修改它的值


后记:

关于 Block 其实还有很多的小知识点

在这里我就先说这么多把,主要是能实用了,以后我会尽快把 比较完整的 Block 的知识写上来,供所有有需要的朋友参考。。




      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值