一、Block
Block的声明、定义和调用
- Block的声明
returnType(^blockName)(parameterTypes) = ^(parameters) {
statements
};
左边是block的声明,右边则是block的定义
returnType:block 的返回类型
blockName:block 的名字
parameterTypes:block的参数
- Block简单定义(没有返回值,没有参数)
void(^blockName)() = ^() {
NSLog(@"block");
};
- Block调用
那么:Block的调用呢?加个小括号即可
blockName();
3.分开写出来
//1.声明 类型:void(^ )() 名:blockName
void(^blockName)();
//2.定义
blockName = ^() {
NSLog(@"block");
};
//3.执行
blockName();
二、Swfit闭包
闭包声明、定义和调用
//闭包声明
typealias blockName = (String) ->()
//闭包的属性
var block: blockName?
//闭包的定义
block = { (str) -> () in
print("------\(str)")
weakSelf!.textField!.text = str
}
//闭包的调用
block!("text")
三、闭包/Block的应用场景
- Block当做类的属性保存代码,适当的时候调用
@interface TestBlock : NSObject
//在对象里声明一个block
@property (nonatomic, copy) void(^block)();
@end
TestBlock *tb = [[TestBlock alloc] init];
//保存到对象里
tb.block = ^() {
NSLog(@"block");
};;
//调用block
tb.block();
- 把Block当做方法的参数使用
//方法声明
- (void)testBlock:(void(^)())blockName;
//方法实现
- (void)testBlock:(void(^)())blockName{
blockName();
}
- 把Block当做方法的返回参数使用
//声明
-(void(^)())run;
//实现
-(void (^)())run{
return ^() {
NSLog(@"block");
};
}
TestBlock *tb = [[TestBlock alloc] init];
tb.run();
- 当做类型的别名
//typedef returnType(^name>)(arguments);
typedef void(^TestBlock)(void);
@property (nonatomic,copy) TestBlock *block;