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`时会发生什么情况?