如何选择性地将一个函数传递给另一个函数?具体地说,假设函数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 ...
}
}