我们可以在Objective-C中声明如下所示的块.
typedef void (^CompletionBlock) (NSString* completionReason);
Run Code Online (Sandbox Code Playgroud)
我试图在swift中做到这一点,它给出了错误.
func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction
Run Code Online (Sandbox Code Playgroud)
错误:使用未声明的'completionFunction'
定义:
var completion: CompletionBlock = { }
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
更新:
根据@ jtbandes的回答,我可以创建具有多个参数的闭包
typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
Run Code Online (Sandbox Code Playgroud)
jtb*_*des 139
typealias CompletionBlock = (NSString?) -> Void
// or
typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void
Run Code Online (Sandbox Code Playgroud)
var completion: CompletionBlock = { reason in print(reason) }
var completion: CompletionBlock = { result, error in print(error) }
Run Code Online (Sandbox Code Playgroud)
请注意,输入类型周围的括号仅在Swift 3+时需要.
BLC*_*BLC 13
这是关于快速关闭的精彩博客.
这里有些例子:
作为变量:
var closureName: (inputTypes) -> (outputType)
Run Code Online (Sandbox Code Playgroud)
作为可选变量:
var closureName: ((inputTypes) -> (outputType))?
Run Code Online (Sandbox Code Playgroud)
作为类型别名:
typealias closureType = (inputTypes) -> (outputType)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38675 次 |
| 最近记录: |