Swift 中带有可选完成块的函数

Function with optional completion block in Swift

当我创建一个函数时,我可以通过给它一个默认值来使它成为可选参数,就像这样:

func foo(bar: String = "foobar") {}

我想对完成块做同样的事情(让它成为可选的)。我尝试了以下方法:

func foo(completionBlock: (foo: String) -> () = () -> ())
func foo(completionBlock: (foo: String) -> () = (foo: String) -> ())
func foo(completionBlock: (foo: String) -> () = ((foo: String) -> ()))
func foo(completionBlock: (foo: String) -> () = ((foo: String) in))
func foo(completionBlock: (foo: String) -> () = {(foo: String) in})

我该怎么做?

编辑:
这个is/was重复的问题,抱歉。但是,我在原始问题中找不到解决方案。所以内森的回答是最好的

在Swift 3:

func foo(completionBlock: (String) -> () = { _ in }) {}

如果你想默认为nil:

func foo(completionBlock: ((String) -> ())? = nil) {

}

如果你的默认完成块非常简单,你可以把它放在函数的定义中:

// A default completion block that is simple enough to fit on one line
func foo(completionBlock: (String) -> () = { result in print(result) }) {
    // ...
}

// A default completion block that does nothing
func foo(completionBlock: (String) -> () = {} ) {
    // ...
}

如果你的默认完成块比较复杂,你可以将它定义为一个单独的函数:

func defaultCompletion(result: String) {
    // ...
}

func foo(completionBlock: ((String) -> ()) = defaultCompletion) {

}