代码块的简单申明使用 :
//代码块 也是一种类型
//无返回值 代码块名 参数(一个)
//申明代码块
void (^myBlock)(NSString *s);
//代码块赋值
myBlock = ^(NSString *s){
NSLog(@"%@",s);
};
//调用代码块
myBlock(@"你好 代码块");
//有返回值的代码块的申明赋值
int(^add)(int a,int b) = ^(int a,int b){
return a+b;
};
//调用
int sum = add(1,2);
NSLog(@"%d",sum);
//代码块做参数
//申明
int(^blockAdd)(int a,int b);
//赋值
blockAdd = ^(int a,int b){
return a+b;
};
//传递代码块名
blockCode(blockAdd);
//直接传递代码块的值
blockCode(^(int a,int b){
return a-b;
});
//代码块排序
NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithObjects:@"ADS",@"DSDS",@"FWE",@"CIJKLJ",@"BDGS", nil];
[mutableArray sortUsingComparator:^NSComparisonResult(id x,id y){
//升序
return [x compare:y];
//倒序
//return -1*[x compare:y];
}];
NSLog(@"%@",mutableArray);
// 代码块中 修改数值
__block int c= 10;
void(^blockChange)(int a,int b) = ^(int a,int b){
//注意:只有 当 c 是全局变量 局部变量 要定义成__block 才能修改
c++;
NSLog(@"%d",c);
};
//调用
blockChange(1,2);
#import <Foundation/Foundation.h>
#import "DownLoad.h"
@interface View : NSObject
//数据
@property(assign,nonatomic)int data;
//保存数据
-(void)save;
@end
#import "View.h"
@implementation View
-(void)save
{
DownLoad *down = [[DownLoad alloc] init];
//代码块的回调 vdata在 downMp3的实现方法中改变了 它的值 然后再 赋给 属性 data
[down downMp3:^(int vdata){
self.data = vdata;
}];
NSLog(@"下载了:%d",self.data);
}
@end
#import <Foundation/Foundation.h>
//定义block类型
typedef void (^blockDown)(int data);
@interface DownLoad : NSObject
//-(void)downMp3:(void (^blockDown)(int data))block;
-(void)downMp3:(blockDown)block;
@end
.m#import "DownLoad.h"
@implementation DownLoad
-(void)downMp3:(blockDown)block
{
NSLog(@"正在下载数据...");
//假设从网上下载了 数据1000
int data = 1000;
//代码块回调 把数据传到 View类
block(data);//说明:1000作为参数传到
NSLog(@"完成");
}
@end
main里面//代码块作为参数
View *view = [[View alloc] init];
[view save];