使用此代码:
func externalFunc() {
println("How can I know which object/class is calling me?")
}
class Test {
func callExternalFunc() {
externalFunc()
}
}
Run Code Online (Sandbox Code Playgroud)
在Objective-C运行时,objc_msgSend 将两个隐藏参数传递给我们发送的每条消息.他们是自我和_cmd.(来源)
在上面的例子中,有没有办法知道谁在打电话externalFunc?
Jaw*_*wad 19
我不确定是否有自动获取此方法的方法,但如果向函数添加String类型的默认参数并将其设置为,则可以获取此信息#function.
例如...
func externalFunc(callingFunctionName: String = #function) {
println("Calling Function: \(callingFunctionName)")
}
Run Code Online (Sandbox Code Playgroud)
然后你会在没有添加默认参数的情况下调用它...
let test = Test()
test.callExternalFunc()
Run Code Online (Sandbox Code Playgroud)
它将打印以下内容......
"Calling Function: callExternalFunc()"
Run Code Online (Sandbox Code Playgroud)
如果您愿意修改方法签名,可以执行以下操作:
func externalFunc(file: String = #file, line: Int = #line) {
println("calling File:\(file) from Line:\(line)")
}
Run Code Online (Sandbox Code Playgroud)
来自apple的快速博客
Swift借用了D语言的一个聪明的特性:当在默认参数列表中计算时,这些标识符(__FILE__和__LINE__)扩展到调用者的位置.
请注意,__FILE__和__LINE__已在Swift 2.2中折旧并已在Swift 3中删除.它们被#file和#line取代.