下面的例子:
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:))
Run Code Online (Sandbox Code Playgroud)
打印无用的输出:
(功能)
(功能)
(功能)
(功能)
(功能)
(功能)
Swift 有没有办法获取函数的名称?我的意思是,不是当前正在运行的函数的名称 ( #funciton)。但是存储在变量中的函数名,或者类函数等。每种语言,尤其是假装函数式的语言,都应该有这样的能力,对吗?
Swift 是一种静态调度的编程语言。这导致 Swift 在需要调用函数时尽可能多地使用内存地址。副作用是无法捕获被调用的函数名称,因为在大多数情况下它将是一个简单的内存地址。
#function之所以有效,是因为该构造在编译时 被调用者函数替换(它不是运行时构造)。
如果您有可用的调试符号,您可以从二进制地址重建函数名称,但这将需要从您的应用程序内访问 dSYM 基础设施,而您不太可能想要这样做,因为您的应用程序与调试符号是对黑客的邀请,对您的应用程序进行逆向工程。
动态分派语言,如 Objective-C,保留对被调用函数(选择器)的引用,但前提是被调用函数是方法(即成员函数)。其他语言,如 Ruby、JavaScript,都是解释性语言,这使得函数名称始终可用。
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |