在Swift中,是否可以从传递的闭包中提取#函数?

在Swift中,是否可以从传递的闭包中提取#函数?,swift,function,closures,Swift,Function,Closures,考虑这一功能: func doSomething ( closure: ( String, Any? ) -> Void ) { let serialisedFunction = #function print( serialisedFunction ) } 它将逐字打印doSomething(闭包:) 太好了!但是如何从传递的闭包中获得并行的#函数属性呢 类似于: func doSomething ( closure: ( String, Any? ) -> Vo

考虑这一功能:

func doSomething ( closure: ( String, Any? ) -> Void )
{
    let serialisedFunction = #function
    print( serialisedFunction )
}
它将逐字打印
doSomething(闭包:)

太好了!但是如何从传递的闭包中获得并行的
#函数
属性呢

类似于:

func doSomething ( closure: ( String, Any? ) -> Void )
{
    let serialisedClosure = closure.#function
    print( serialisedClosure )
}
上下文:我有一个信号/事件总线,它在信号/事件发生时传递闭包来调用。我想为这些信号/事件创建唯一的键,以确保它们只被监听一次,因此我尝试基于序列化对象(包括监听闭包)创建键


谢谢。

由于闭包可以匿名,这将很困难。如果我们将
doSomething
称为,比如,
doSomething(){uu,{uu()}
,您希望打印什么?我建议您将闭包包装在一个结构中,例如,只包含一个
(字符串,任意?)->Void
闭包和一个id,比如
let id:Int
。你可以很容易地将这样一个结构与Hashable一致,这样你就可以拥有一个
[yourclosurestuct:Bool]
字典,你可以用它来确保信号/事件只被监听一次。好主意@dfri,谢谢,我会试试的。