// 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循环打印n次Hello 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(){
//定义4个block,做四则运算,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;
}