//
//main.m
//Block
//
//Created by DioneFlora on 16/10/20.
//Copyright (c) 2016年DioneFlora. All rights reserved.
//
#import <Foundation/Foundation.h>
//block塊(數(shù)據(jù)類型):封裝了一段具有特定功能的代碼段
//函數(shù)有函數(shù)名,block是沒有名字的,也可以叫做匿名函數(shù);函數(shù)不能作為參數(shù)傳遞,block可以作為參數(shù)傳遞
//return(如果返回值類型不是void就必須將返回值return出去)
//形式:
/*
返回值類型(^block變量名)(參數(shù)列表)=^(參數(shù)列表){
代碼段
}
*/
//調(diào)用
//block變量名()
//這是一個(gè)無參無返的block
voiddemoOne(){
//無參無返的block(寫一個(gè)block,用for循環(huán)打印三遍“Hello World!”)
//定義一個(gè)block
void(^myBlock)() = ^(){
?for(inti =0; i <3; i++) {
NSLog(@"Hello World!");
?}
};
//調(diào)用一個(gè)block
myBlock();
}
//這是一個(gè)有參無返的block
/*
void(^block名)(參數(shù)列表)=(參數(shù)列表){}
*/
voiddemoTwo(){
//定義一個(gè)block,用for循環(huán)打印N次Hello World!,n用鍵盤輸入
void(^youBlock)(intn) = ^(intn){
for(inti =0; i < n; i++) {
NSLog(@"Hello World!");
}
};
intnumber;
NSLog(@"請(qǐng)輸入一個(gè)整數(shù):\n");
scanf("%d",&number);
//調(diào)用一個(gè)block
youBlock(number);
}
//無參有返的block
/*
返回值類型(^block名)()=^(){}
*/
voiddemoThree(){
int(^peopleCount)() = ^(){
return28;
};
//調(diào)用
intcount = peopleCount();
NSLog(@"count = %d",count);
//定義一個(gè)block返回字符串hello
char* (^string)() = ^(){
return"hello";
};
char*str = string();
NSLog(@"str = %s",str);
}
voiddemoFour(){
//有參有返的block
//寫4個(gè)block來做四則運(yùn)算(+,-,*,/),a,b兩個(gè)值通過鍵盤輸入
int(^addCount)(intn,intm) = ^(intn,intm){
returnn + m;
};
int(^delCount)(intn,intm) = ^(intn,intm){
returnn - m;
};
int(^mulCount)(intn,intm) = ^(intn,intm){
returnn * m;
};
int(^chuCount)(intn,intm) = ^(intn,intm){
if(m ==0){
NSLog(@"除數(shù)不能為0");
return0;
}
returnn / m;
};
inta,b;
NSLog(@"請(qǐng)輸入兩個(gè)數(shù):\n");
scanf("%d%d",&a,&b);
intadd = addCount(a,b);
NSLog(@"add = %d",add);
intdel = delCount(a,b);
NSLog(@"del = %d",del);
intmul = mulCount(a,b);
NSLog(@"mul = %d",mul);
intchu = chuCount(a,b);
NSLog(@"chu = %d",chu);
}
//diyBlock是給int(^)(int a,int b)這種block類型定義的一個(gè)新名字,以后我們使用diyBlock就表示int(^)(int a,int b)這個(gè)類型
typedefint(^diyBlock)(inta,intb);
voiddemoFive(){
diyBlock addBlock = ^(inta,intb){
returna + b;
};
diyBlock jianBlock = ^(inta,intb){
returna - b;
};
diyBlock chengBlock = ^(inta,intb){
returna * b;
};
diyBlock chuBlock = ^(inta,intb){
returna / b;
};
inta,b;
NSLog(@"請(qǐng)輸入兩個(gè)數(shù):\n");
scanf("%d%d",&a,&b);
intadd = addBlock(a,b);
NSLog(@"add = %d",add);
intjian = jianBlock(a,b);
NSLog(@"jian = %d",jian);
intcheng = chengBlock(a,b);
NSLog(@"cheng = %d",cheng);
intchu = chuBlock(a,b);
NSLog(@"chu = %d",chu);
}
intmain(intargc,constchar* argv[]) {
@autoreleasepool{
demoOne();
demotwo();
demoThree();
demoFour();
demoFive();
}
return0;
}