Swift中调用自定义闭包

Calling self-defined closure in Swift

objective-c中我可以定义我自己的块类型:

typedef void (^myBlock)(id param1, id param2, BOOL param3);

然后在其他地方定义块体(例如另一个 class)来处理传递的值,例如:

myBlock block = ^(id param1, id param2, BOOL param3) { 
 if (param3){
   NSLog("parameters:%@,%@",param1,param2)
 }};

为了在 Swift 中做同样的事情,我使用 typealias:

定义了我的块
typealias myBlock = (param1:AnyObject, param2:AnyObject, param3:Bool) -> ()

但我不能简单地这样称呼它:

let block: myBlock = {param1,param2,param3 in 
 if (param3){
     print(param1,param2)
 }}

并且有一个警告:

Initialization of immutable value 'block' was never used; consider replacing with assignment to '_' or removing it.

如何调用 myBlock 并在 Swift 中定义它的正文?

提前致谢!

我认为出现警告是因为您没有在代码中的任何地方使用 "block" 变量。

声明 "block" 变量后,尝试在您的代码中的某处使用它。

你的声明没有任何问题。但正如这个词告诉你的那样,你只是 声明 某事而不是打电话。所以闭包不会在任何地方被调用。

试试这个

typealias myBlock = (param1:AnyObject, param2:AnyObject, param3:Bool) -> ()

let block: myBlock = {(param1,param2,param3) in 
 if (param3){
     print(param1,param2)
 }}

block(param1: 1,param2: 2,param3: true)

当然,您必须用您的值替换实际参数。正如您在 playground 屏幕截图中看到的那样,它的效果非常好。