block使用

作者: 鸽z1陰蘭 | 来源:发表于2017-04-14 17:28 被阅读63次

    1.block相关的一些基本

    在类中定义一个block变量,就像定义一个函数,可以定义在方法的内部,也可以定义在方法的外部。只有调用block的时候,才会执行block块中的方法,而且在block的方法体内。是不可以对外面的变量进行修改的。但是用__block定义的变量是可以在方法体内修改的。

    定义返回值类型为NSInteger,方法名为IntBlock的代码块:

    NSInteger currentNum = 9;

    NSInteger (^IntBlock)(NSInteger) = ^(NSInteger num){

    return num*currentNum;

    };

    NSInteger  newNum = IntBlock(7);

    定义可以修改变量的block:

    __block NSInteger m = 50;//添加__block的定义,就可以在block的方法体内,修改变量m;如果不加__block的话,Xcode会提示m变量错误信息:Variable is not assing(missing __block type)

    void(^sumMNBlock)(NSInteger) = ^(NSInteger n){

    m = m + n;

    NSLog(@"m和n的和为:%ld",x);

    }

    sumMNBlock(50);

    2.定义在方法外部

    在ViewDidLoad方法外部,定义一个参数,没有返回值的block

    void(^ NoNumBlock)(NSInteger) = ^(NSInteger num){

    NSLog(@"整数值为: %ld",num);

    }

    3.利用block实现两个页面之间的传值

    以单个字符串为例,其他情况只需要改变参数类型即可:

    传递值页面:ChuanzhiViewController

    在.m文件中:定义block块

    @property(nonatomic,copy)void(chuanzhiViewControllerBlock)(NSString *valueString);

    在.h文件中:传值方法

    if (self.nextViewControllerBlock) {

    self.nextViewControllerBlock(valueString);

    }

    接收值页面:JieshouViewController

    在页面跳转的时候:

    JieshouViewController *VC = [JieshouViewController new];

    VC.nextViewControllerBlock = ^(NSString *valueString){

    NSLog(@"%@",valueString);

    };

    [self.navigationController pushViewController:VC animated:YES];

    补充:快速敲block:inline——>回车

    相关文章

      网友评论

        本文标题:block使用

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