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) {
}
当我创建一个函数时,我可以通过给它一个默认值来使它成为可选参数,就像这样:
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) {
}