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



如何选择性地将一个函数传递给另一个函数?具体地说,假设函数a接受函数B作为参数。如果函数B不为零,如何在函数A内部执行函数B?

很难看出这有什么困难,所以也许这不是你的意思,因为它看起来很明显;但不管怎样,

func optionalFunctionExpecter(f:(()->())?) {
f?()
}

以下是如何用实际函数调用它:

func g() {
println("okay")
}
optionalFunctionExpecter(g)

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

optionalFunctionExpecter { println("okay2") }

以下是如何用nil:来称呼它

optionalFunctionExpecter(nil)

注意,在我的optionalFunctionExpecter实现中,当用nil调用时,什么都不会发生:我们不会调用f,我们不会崩溃,我们不会做任何事情。如果您需要知道nil已经通过,您可以很容易地找到:只需在optionalFunctionExpecter中询问f == nil是否通过,然后根据需要继续。为了获得更大的灵活性,我们可以这样重写:

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

最新更新