你如何选择将函数传递给另一个函数?具体地说,假设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)
| 归档时间: |
|
| 查看次数: |
4023 次 |
| 最近记录: |