我想使用函数名来解决一些问题,但#function
似乎无法与@inline(__always)
一起使用,这是我的代码:
@inline(__always) func log() {
print(#function)
}
func a() { log() } // want 'a()', but got 'log()'
func b() { log() }
func c() { log() }
//...
任何人都可以解释一下吗?或者这只是一个愚蠢的想法。
答案 0 :(得分:3)
如果您打算打印调用函数的名称
log()
,然后你应该将它作为默认参数传递(对其进行评估)
在调用者的上下文中,如所示
在Swift博客的Building assert()
in Swift, Part 2: __FILE__
and __LINE__
中。
示例:
@inline(__always) func log(_ message: String, callingFunction: String = #function) {
print("\(callingFunction): \(message)")
}
func a() { log("Hello world") }
func b() { log("Foo") }
func c() { log("Bar") }
a() // a(): Hello world
b() // b(): Foo
c() // c(): Bar
无论log
函数是否内联,这都有效。
(内联不会改变程序的语义。特别是,
这并不意味着包含func log
的源代码
func a()
的源代码并编译为单个函数。)