Objective-c的Block基础

本文详细介绍了Objective-C中Block的概念及应用,包括无参无返、有参无返、无参有返和有参有返四种Block类型,并通过具体实例展示了如何定义与调用Block。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//  main.m


//  Block


//


//  Created by lanou on 16/10/20.


//  Copyright (c) 2016 lanou. All rights reserved.


//


 #import < Foundation/Foundation.h >


//block(变量):封装了一段具有特定功能的代码段


//函数有函数名,block是没有名字的,也可以叫做匿名函数


//函数不能做参数传递,block可以作为参数传递


/**


  形式:

  

    返回值类型 (^block变量名)(参数列表) = ^(参数列表){

        代码段

        return (如果返回值类型不是void就必须将返回值return出去)

    }

 

  调用:

  

    block变量名(参数列表)

    

 */


//diyBlock是给int (^add)(int a, int b)这种block类型定义的一个新名字


//以后我们使用diyBlock就表示int (^add)(int a, int b)这个类型


typedef int (^diyBlock)(int a, int b);


//无参无返的block


void demo0(){


    //定义一个block

    //定义一个block,for循环打印三句'Hello World'

    void (^SayHi)() = ^(){

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

            //printf("Hello World!\n");

            NSLog(@"Hello World!\n");

        }

    };

    

    //调用一个block

    SayHi();

    

}


//这是一个有参无返的block


void demo2(){


    //定义一个block,for循环打印nHello World,n用键盘输入

    //前面的变量名可以不写

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

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

            NSLog(@"Hello World!\n");

        }

    };

    

    int n;

    printf("请输入要打印的数量:\n");

    scanf("%d",&n);

    //调用

    SayHiForN(n);

    

}


//无参有返的block


void demo3(){


    //定义一个无参有返的block

    int (^peopleCount)() = ^(){

        return 28;

    };

    

    //调用

    int count = peopleCount();

    NSLog(@"count = %d\n",count);

    

    //定义一个block返回字符串'Hello'

    char *(^string)() = ^(){

        return "hello";

    };

    

    //调用

    char *str = string();

    NSLog(@"str = %s\n",str);

    

}


//有参有返的block


void demo4(){


    //定义4block,做四则运算,a,b两个数通过键盘输入

    //

    diyBlock add = ^(int a, int b){

        return a + b;

    };

    //

    diyBlock subtract = ^(int a, int b){

        return a - b;

    };

    //

    diyBlock multiply = ^(int a, int b){

        return a * b;

    };

    //

    diyBlock divide = ^(int a, int b){

        if (a == 0) {

            NSLog(@"被除数不能为0!\n");

            return 0;

        }

        return a / b;

    };

    

    int a, b;

    printf("输入a,b用空格隔开:\n");

    scanf("%d%d",&a, &b);

    //调用

    int sum1 = add(a, b);

    int sum2 = subtract(a, b);

    int sum3 = multiply(a, b);

    int sum4 = divide(a, b);

    NSLog(@"\na + b = %d\na - b = %d\na * b = %d\na / b = %d\n",sum1,sum2,sum3,sum4);

    

}


int main(int argc, const char * argv[]) {


    @autoreleasepool {

        demo0();

        demo2();

        demo3();

        demo4();

    }

    return 0;

    

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值