Swift:打印存储在变量中的函数的名称



以下示例:

let plus: (Int, Int) -> Int = (+)
print(plus)
debugPrint(plus)
print(UIView.removeFromSuperview)
debugPrint(UIView.removeFromSuperview)
print(UnsafePointer<Int>.distance(to:))
debugPrint(UnsafePointer<Int>.distance(to:))

打印无用的输出:

(功能((功能((功能((功能((功能(

(功能((功能(




有没有办法在 Swift 中获取函数的名称?我的意思是,不是当前正在运行的函数的名称(#funciton(。但是存储在变量中的函数的名称,或类函数等。每一种语言,尤其是那些假装是功能性的语言,都应该有这样的能力,对吧?

Swift 是一种静态调度的编程语言。这导致 Swift 在需要调用函数时尽可能多地使用内存地址。副作用是无法捕获被调用的函数名称,因为在大多数情况下,它将是一个简单的内存地址。

#function工作是因为该构造在编译时被调用者函数替换(它不是运行时构造(。

如果您有可用的调试符号,则可以从二进制地址重建函数名称,但这需要从应用程序内部访问 dSYM 基础结构,而您不太可能想要这样做,因为将应用程序与调试符号一起发布是黑客对您的应用程序进行逆向工程的邀请。

动态调度的语言,如Objective-C,保留对被调用函数(选择器(的引用,但前提是被调用的函数是一个方法(即成员函数(。其他语言,如Ruby,JavaScript,是解释型语言,这使得函数名称始终可用。

最新更新