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 屏幕截图中看到的那样,它的效果非常好。
在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 屏幕截图中看到的那样,它的效果非常好。