代码块(block)之函数体(二)

代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。

 //block作为函数的参数
//函数返回值类型 函数名(block的声明格式)
void fun(int (^block)(int a,int b)){
    int  sum=block(5,6);
    NSLog(@"%d",sum);
}
void fun1(NSString *(^myBlock)(NSString *s),NSString *s1){
   
    NSLog(@"%@",myBlock(s1));
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
     
        //当一个block作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致

        int (^myBlock)(int a,int b)=^(int a,int b){
            NSLog(@"%d,%d",a,b);
            return  a*b;
        };
        //函数形参是block,调用时,直接传block的名字就行
        fun(myBlock);
        //调用的另一种方式:内联
        //内联block格式:^返回值类型 (形参列表){}

        fun(^int(int a, int b) {
            return  a-b;
        });

    fun1(^NSString *(NSString *s) {
                    return s;
                }, @"123");
        
        
    }
    return 0;
}
原文地址:https://www.cnblogs.com/wyhwyh2114/p/4935516.html