前言
在項目開發(fā)中經(jīng)常會去查iOS閉包怎么寫祠乃,因為它的語法太古怪,兩種語言寫法不一,經(jīng)常搞混贷掖,干脆記錄下常用的寫法算了
閉包定義
閉包是指可以包含自由(未綁定到特定對象)變量的代碼塊藕夫;這些變量不是在這個代碼塊內(nèi)或者任何全局上下文中定義的孽糖,而是在定義代碼塊的環(huán)境中定義(局部變量)枯冈。“閉包” 一詞來源于以下兩者的結(jié)合:要執(zhí)行的代碼塊(由于自由變量被包含在代碼塊中办悟,這些自由變量以及它們引用的對象沒有被釋放)和為自由變量提供綁定的計算環(huán)境(作用域)尘奏。
聲明閉包(block)
typedef NSString *(^blockCallback)(NSString *parameter1, NSString *parameter2);
//回調(diào)閉包 用于評價成功后
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")
函數(shù)定義閉包(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"))
}
調(diào)用函數(shù)閉包(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
}
結(jié)尾
Swift 版本根據(jù)參數(shù)和返回值有很多縮寫方式,這里就不一一寫上了病蛉。