[英]swift : Closure declaration as like block declaration
我们可以在Objective-C中声明如下所示的块。
typedef void (^CompletionBlock) (NSString* completionReason);
我试图在swift中做到这一点,它给出了错误。
func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction
错误:使用未声明的'completionFunction'
定义:
var completion: CompletionBlock = { }
这该怎么做?
更新:
根据@ jtbandes的回答,我可以创建具有多个参数的闭包
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
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) }
请注意,输入类型周围的括号仅在Swift 3+时需要。
这里有关于快速关闭的精彩博客。
这里有些例子:
作为变量:
var closureName: (inputTypes) -> (outputType)
作为可选变量:
var closureName: ((inputTypes) -> (outputType))?
作为类型别名:
typealias closureType = (inputTypes) -> (outputType)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.