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)