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?.propertymaybeArray?[0]。如果将检查f 是否为nil,如果不是,则执行它。返回值将被包裹在一个可选项中,如果 fnil 并且未执行,则返回值是 nil @Crashalot 查看***.com/a/29717211/3925941 了解一长串可选处理技术 谢谢@AirspeedVelocity! @Relequestual 它说参数f 是一个不带参数也不返回值的函数,封装在一个 Optional 中——这是 OP 要求的。这是我书中关于函数作为参数的讨论:apeth.com/swiftBook/ch02.html#_function_as_value

以上是关于Swift:如何选择性地将函数作为参数传递并调用函数?的主要内容,如果未能解决你的问题,请参考以下文章

设计一个函数,它接受不定数量的参数,这是参数都是函数。这些函数都接受一个回调函数作为参数,按照回调函数被调用的顺序返回函数名

如何通过在 swift playground 中传递 Int 数组来创建求和函数并调用它?

从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?

c语言中数组名作为函数参数

将“this”作为参数传递,但在调用函数的上下文中操作

当函数作为prop - React传递时,用酶调用函数