iOS Objective-C与Swift闭包(block)写法
2016-11-04 本文已影响548人
Ucself
前言
在项目开发中经常会去查iOS闭包怎么写,因为它的语法太古怪,两种语言写法不一,经常搞混,干脆记录下常用的写法算了
闭包定义
闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。
声明闭包(block)
typedef NSString *(^blockCallback)(NSString *parameter1, NSString *parameter2);
//回调闭包 用于评价成功后
typealias callbackFunc = (_ orderId:String ) -> Void
var evaluationBlockCallback:callbackFunc?
定义闭包(block)
>第一种方式 使用声明
@property (nonatomic,strong) blockCallbackType blockCallbackName;
_blockCallbackName = ^(NSString *parameter1,NSString *parameter2){
return parameter1;
};
>第二种方式 不使用声明
@property (nonatomic,strong) NSString *(^blockCallbackName2)(NSString *parameter1, NSString *parameter2);
_blockCallbackName2 = ^(NSString *parameter1,NSString *parameter2){
return parameter1;
};
let blockCallbackName:String = {(parameter1:String,parameter2:String) ->String in
return parameter1
}("parameter1","parameter2")
函数定义闭包(block)
-(void)functionUseBlock:(NSString* (^)(NSString *parameter1, NSString *parameter2))callBackOne callBackTwo:(blockCallbackType)callBackTwo{
if (callBackOne) {
callBackOne(@"parameter1",@"parameter2");
}
if (callBackTwo) {
callBackTwo(@"parameter1",@"parameter2");
}
}
func functionUseBlock(callBack:(String,String) ->String) -> Void {
print(callBack("parameter1","parameter2"))
}
调用函数闭包(block)
[self functionUseBlock:^NSString *(NSString *parameter1, NSString *parameter2) {
return parameter1;
} callBackTwo:^NSString *(NSString *parameter1, NSString *parameter2) {
return parameter1;
}];
self.functionUseBlock = { (parameter1, parameter2) -> String in
return parameter2
}
结尾
Swift 版本根据参数和返回值有很多缩写方式,这里就不一一写上了。