OC语法<3.2> OC中特有的语法:Block数据类型

Block也是一种基本数据类型                                                                                                                                       

本节的知识点

1: Block实际上就是一个匿名方法,(注意,是个方法!!)只不过他是基本数据类型,可以作为参数传递,可以有返回值,能够声明成变量。

 2:Block基本数据类型弥补了指向函数的指针不能够不能够直接保存一个函数体(代码快)的缺陷,原来我们不能够再一个方法中再写入一个方法,有了block之后就可以了

 3:Block可以访问外界的成员变量,但是不能够修改过,想修改的话要用__block关键字进行声明,不过实际当中一般都不改,所以不举例了

 

 我们在开发当中一般都是什么时候会用到block类型呢???

 在实际开发当中,如果你发现一个方法中的算法有多重实现方式,你一时还不知道那个更好,就可以把方法中其中一个参数定义成Block方式,(现在可能理解不了,没关系,后面开发的时候多用几次就会了);

 首先我们看一下Block基本类型的格式,main函数中 调用了一个定义类Calculate,还用Block写了一个测试加减乘除的方法    calculateWithNumber1:andNumber2:  andCalculate:  

#import <Foundation/Foundation.h>
#import "Calculate.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //回忆一下OC中的基本数据类型 int ,char,float ,double
        //新增的类型:NSObject ,id ,BOOL,block,SEL
        //不带参数的block书写格式
        void (^myBlock)() =^{
            NSLog(@"不带参数的格式");
        };
        
        //带参数的block书写格式
        int (^sumBlock)(int a ,int b)=^(int a ,int b){
            NSLog(@"带参数的格式");
            return a+b;
        };
        
        NSLog(@"测试求和结果:%i",sumBlock(10,30));
        
        //下面我们用block实现两个数的加减乘除,Calculate(计算类)
        
        //下面是第三步
        //为了实现加减乘除我们把block这个参数给摘出来在外面写
        int (^sum2)(int a ,int b) = ^(int a,int b){
            return  a +b;
            //return a-b;
            //return a*b;
            //return a/b;
        };
        
        //下面是第一步
        Calculate *cal = [[Calculate alloc]init];
        //提示的时候双击block方法会自动显示出来格式
        
        //下面是第二步
//        int sumNumber = [cal calculateWithNumber1:45 andNumber2:50 andCalculate:^int(int a, int b) {
//            return  a+b;
//        }];
        int sumNumber = [cal calculateWithNumber1:45 andNumber2:50 andCalculate:sum2];
        NSLog(@"测试加减乘除的结果:%i",sumNumber);
        
    }
    return 0;
}

Calculate类的.h文件

#import <Foundation/Foundation.h>

typedef int (^calculateBlock)(int a ,int b);
@interface Calculate : NSObject

-(int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate;
@end

Caculate类的.m文件

#import "Calculate.h"

@implementation Calculate

-(int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate
{
    //经常变化的功能,在设计当中叫做封装变化
    return calculate(number1,number2);
}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值