[英]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.