繁体   English   中英

swift:Closure声明就像块声明一样

[英]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) -> ()

函数类型语法(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) }

请注意,输入类型周围的括号仅在Swift 3+时需要。

这里有关于快速关闭的精彩博客。

这里有些例子:

作为变量:

var closureName: (inputTypes) -> (outputType)

作为可选变量:

var closureName: ((inputTypes) -> (outputType))?

作为类型别名:

typealias closureType = (inputTypes) -> (outputType)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM