Ios 如何在swift中识别调用方法和被调用方法
下面是一个场景Ios 如何在swift中识别调用方法和被调用方法,ios,swift,Ios,Swift,下面是一个场景 func callingMethod_A { self.someCalculation() } func callingMethod_B{ self.someCalculation() } func someCalculation{ //how to find who called this method? is it callingMethod_A or _B at runtime? //bla bla } 我们如何获得在运行时调用它的方法名 谢谢。无论如何,对于
func callingMethod_A {
self.someCalculation()
}
func callingMethod_B{
self.someCalculation()
}
func someCalculation{
//how to find who called this method? is it callingMethod_A or _B at runtime?
//bla bla
}
我们如何获得在运行时调用它的方法名谢谢。无论如何,对于Swift代码,我想出了一种方法: 定义一个
字符串
参数调用函数
,并给它一个默认值#函数
。不要从调用方传递任何信息,编译器会提供调用函数名
基于@Anu.Krthik的答案:
func someCalculation (parameter: String, callingMethod: String = #function ) {
print("In `\(#function)`, called by `\(callingMethod)`")
}
func foo(string: String) {
someCalculation(parameter: string)
}
foo(string: "bar")
上面的照片
In `someCalculation(parameter:callingMethod:)`, called by `foo(string:)`
但是,请注意,如果调用方为callingFunction
参数提供值,则此技术可能会被破坏。如果您将其命名为:
func foo(string: String) {
someCalculation(parameter: string, callingMethod: "bogusFunctionName()")
}
你得到了输出
In `someCalculation(parameter:callingMethod:)`, called by `bogusFunctionName()`
相反。您可以像这样使用Thread.callstack符号
func callingMethod_A() {
self.someCalculation()
}
func callingMethod_B(){
self.someCalculation()
}
func someCalculation(){
let origin = Thread.callStackSymbols
print(origin[0])
print(origin[1])
}
传递参数以标识methodAdd参数,或者如果只是出于调试目的,请查看callstack。Larme,如何在代码中查看调用堆栈?有没有一种方法可以从调用堆栈中获取函数签名?当将“调用方ID”传递到方法中时,可能有更好的方法(委托、返回)来实现您想要的功能。为什么
someCalculation
需要知道callingMethod\u A
或callingMethod\u B
是否调用了它?当您决定添加callingMethod\u C
或将callingMethod\u A
更改为callingMethod\u A1`时会发生什么情况?