Swift:如何有选择地将函数作为参数传递并调用函数?

Cra*_*lot 10 ios swift

你如何选择将函数传递给另一个函数?具体地说,假设functionA接受作为参数functionB.如果functionB不是nil,你怎么能在functionA里面执行functionB?

mat*_*att 16

很难看出这有什么难的,所以也许这不是你的意思,因为它看起来非常明显; 但无论如何,这里是:

func optionalFunctionExpecter(f:(()->())?) {
    f?()
}
Run Code Online (Sandbox Code Playgroud)

以下是使用实际函数调用它的方法:

func g() {
    println("okay")
}
optionalFunctionExpecter(g)
Run Code Online (Sandbox Code Playgroud)

或者,使用实际的匿名函数调用它:

optionalFunctionExpecter { println("okay2") }
Run Code Online (Sandbox Code Playgroud)

以下是如何调用它nil:

optionalFunctionExpecter(nil)
Run Code Online (Sandbox Code Playgroud)

观察在我的实现中optionalFunctionExpecter,当被调用时nil,什么都不会发生:我们不会打电话f,我们不会崩溃,我们不会做任何事情.如果你需要知道的是nil通过了,你可以很容易地发现:刚刚问,optionalFunctionExpecter是否f == nil并根据需要在此基础上继续进行.为了获得更大的灵活性,我们可以像这样重写:

func optionalFunctionExpecter(f:(()->())?) {
    if let f = f {
        f()
    } else {
        // ... nil was passed, respond to that fact ...
    }
}
Run Code Online (Sandbox Code Playgroud)