如何在不需要闭包返回值时调用函数

时间:2018-02-02 12:45:07

标签: swift closures

我用一个转义变量写了一个函数

func getData(data: PSData, otherParams: [String], completion: @escaping (Bool) -> Void)

通常我会这样称呼

getData(data: myData, otherParams: myOtherParams) { (response) in
    print(response)
}

如果我不需要响应,以这种方式调用函数是否正确?或者是否有任何简化可以做到

getData(data: myData, otherParams: myOtherParams) { (_) in }

3 个答案:

答案 0 :(得分:3)

是的,这是正确的:

getData(data: myData, otherParams: myOtherParams) { _ in }

但是当你通过nil(不输入这个丑陋的大括号)或使用nil作为默认值时,它会更清晰一些:

func getData(data: PSData, otherParams: [String], completion: ((Bool) -> Void)? = nil)

getData(data: myData, otherParams: myOtherParams, completion: nil)
getData(data: myData, otherParams: myOtherParams) // shorter version

UIKit使用类似的方式:

@available(iOS 5.0, *)
open func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Swift.Void)? = nil)

答案 1 :(得分:1)

您还可以编写类似以下内容的函数:

func getData(data: PSData, otherParams: [String], completion: ((Bool) -> ())?) {

}

getData(data: myData, otherParams: myOtherParams, completion: nil)

OR

getData(data: myData, otherParams: myOtherParams) { (response) in
    print(response)
}

答案 2 :(得分:0)

你可以省略括号:

getData(data: myData, otherParams: myOtherParams) { _ in }

...或者如果该函数是您自己的并且可以自定义,您可以为闭包提供默认值,您可以将它完全取消:

func getData(data: PSData, otherParams: [String], completion: @escaping(Bool) -> Void = { _ in })
[...]
getData(data: myData, otherParams: myOtherParams)