在Swift中获取函数名称

Rya*_*ans 4 reflection function ios swift

我希望迅速获得函数的名称。

我基本上想要这样的东西

__FUNCTION__
Run Code Online (Sandbox Code Playgroud)

但是来自不同的功能,例如

func do () {
   code etc
}

func doStuff () {
   var funcName = do().name
}
Run Code Online (Sandbox Code Playgroud)

以上将是完美的。

有任何想法吗?

Daw*_*ong 7

#function 可能就是您想要的。

 print("--------- ", #function)
Run Code Online (Sandbox Code Playgroud)


Ram*_*uri 5

在 Swift 3 中,正确的关键字是#function。您可以传递一个指向用于存储函数名称的String对象的指针。例如:

func myFunction(param1:Any, param2:Any, functionName: UnsafeMutablePointer<String>?) -> Any {
    if functionName != nil { 
        functionName.pointee = #function 
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

用法:

var name:String 
// You can always pass nil if you are not interested in retrieving the 
// function name
let result = myFunction(1, 2, functionName: &name) 
print(name)
Run Code Online (Sandbox Code Playgroud)


小智 1

不是最干净的,但它有效。

func dost () -> (name: String,String) {
    return (__FUNCTION__,"")
}

func doStuff () {
    var funcName = dost().name
}
Run Code Online (Sandbox Code Playgroud)

您可以只返回函数名称而不返回元组。

  • 注意:在 Swift 3 中它已被#function 取代。 (3认同)