swift:像块声明一样closures声明
我们可以在Objective-C中声明如下。
typedef void (^CompletionBlock) (NSString* completionReason);
我试图迅速做到这一点,它给错误。
func completionFunction(NSString* completionReason){ } typealias CompletionBlock = completionFunction
错误:使用未声明的“completionFunction”
定义:
var completion: CompletionBlock = { }
这个怎么做?
更新:
根据@ jtbandes的回答,我可以像多个参数一样创build闭包
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
函数types的语法是(in) -> out
。
typealias CompletionBlock = (NSString?) -> Void // or typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void
var completion: CompletionBlock = { reason in print(reason) } var completion: CompletionBlock = { result, error in print(error) }
请注意,inputtypes的括号仅在Swift 3+中是必需的。
这里是关于迅速closures的真棒博客。
这里有些例子:
作为一个variables:
var closureName: (inputTypes) -> (outputType)
作为一个可选variables:
var closureName: ((inputTypes) -> (outputType))?
作为一个types别名:
typealias closureType = (inputTypes) -> (outputType)