在Swift

时间:2015-10-26 07:16:08

标签: swift closures block typedef type-alias

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

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

然后在其他地方(例如另一个类)定义块体,以使用传递的值执行某些操作:

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)
 }}

并且有一个警告:

  

永远不会使用不可变值'block'的初始化;考虑   替换为“_”或删除它。

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

我认为出现警告是因为您没有在代码中的任何位置使用“阻止”变量。

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

答案 1 :(得分:0)

您的申报没有任何问题。但正如这个词告诉你的那样,你只是宣布某事而不是召唤。所以闭包不会在任何地方调用。

试试这个

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)

您必须使用您的值替换实际参数。就像你在游乐场截图中看到的魅力一样。

enter image description here