簡體   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