Swift:如何选择性地将函数作为参数传递并调用函数?
Posted
技术标签:
【中文标题】Swift:如何选择性地将函数作为参数传递并调用函数?【英文标题】:Swift: how to optionally pass function as parameter and invoke the function? 【发布时间】:2015-05-01 04:14:12 【问题描述】:如何选择将一个函数传递给另一个函数?具体来说,假设 functionA 接受 functionB 作为参数。如果functionB不是nil,怎么在functionA里面执行functionB呢?
【问题讨论】:
【参考方案1】:很难看出这有什么难处,所以也许这不是你的意思,因为它看起来如此微不足道;但无论如何,这里是:
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 ...
【讨论】:
很抱歉给您带来了困惑。如果有人将 nil 传递给 optionalFunctionExpecter 怎么办?换句话说,有时一个函数会被传递,而其他时候,没有函数被传递。如果函数为nil,"f?()" 不会抛出异常吗? No –f?()
是可选链接(类似于maybeObj?.property
或maybeArray?[0]
。如果将检查f
是否为nil
,如果不是,则执行它。返回值将被包裹在一个可选项中,如果 f
是 nil
并且未执行,则返回值是 nil
。
@Crashalot 查看***.com/a/29717211/3925941 了解一长串可选处理技术
谢谢@AirspeedVelocity!
@Relequestual 它说参数f
是一个不带参数也不返回值的函数,封装在一个 Optional 中——这是 OP 要求的。这是我书中关于函数作为参数的讨论:apeth.com/swiftBook/ch02.html#_function_as_value以上是关于Swift:如何选择性地将函数作为参数传递并调用函数?的主要内容,如果未能解决你的问题,请参考以下文章
设计一个函数,它接受不定数量的参数,这是参数都是函数。这些函数都接受一个回调函数作为参数,按照回调函数被调用的顺序返回函数名
如何通过在 swift playground 中传递 Int 数组来创建求和函数并调用它?