在Swift中打印当前文件的类名

时间:2014-06-30 16:45:43

标签: ios swift

我试图在Swift中打印当前类的名称。更具体地说,我想实现以下输出:

myFunction() in ClassContainingTheFunction

我的功能名称打印很好。这是我最接近的打印类名和函数名称:

println("\(__FUNCTION__) in \(__FILE__)") 

打印

myFunction() in path/to/TheFile.swift

 println("\(__FUNCTION__) in \(object_getClassName(self))")

打印

 myFunction() in [mangled class name here]

这两个都接近我想要的,但路径很长,与我在代码中看到的名称相比,受损的类名称可能非常难以理解。

6 个答案:

答案 0 :(得分:28)

所以你的问题只是显示字符串的长路径。 我最好的想法是将String缩短为文件名。

var test: String = "/Users/user/Project/classfile.m"

test = test.lastPathComponent // here it is only classfile.m
test = test.stringByDeletingPathExtension // here it is only classfile

由于object_getClassNAme(...)将使用实际使用的类而不是您使用的名称(如类集群),因此对您来说这是错误的方法。 通过来学习具体的类实现名称会更容易。


而不是测试,您可以使用获取文件名的方式,例如__FILE__。以下代码生成您要查找的输出:

println("\(__FUNCTION__) in \(__FILE__.lastPathComponent.stringByDeletingPathExtension)") 

Swift 2.2

Swift 2.2 中,旧的标识符已弃用,并替换为#file#line#column#function

print("\(#function) in \(#file.components(separatedBy: "/").last ?? "")")

输出示例:

file81.swift

答案 1 :(得分:2)

我的简短回答是,

print(" Function name : \(#function), Class Name : \(self.dynamicType), File Path : \(#file)")

答案 2 :(得分:2)

我想要一个解决方案,注销一个漂亮的整齐字符串(Swift 3.0) - 类名称 - 函数名称。例如:

OnboardingGetStartedController - viewDidLoad()

所以我最终得到了一个我在utils类中放入的一个简短函数,如下所示:

summarycount al

我在应用程序的任何地方都会这样说,就像这样:

class func logCurrentFunc(fileStr: String, funcStr: String) {

    var fileName = fileStr.components(separatedBy: "/").last ?? ""
    fileName = fileName.components(separatedBy:".").first ?? ""
    let printFunc = "\(fileName) - \(funcStr)"
    print(printFunc)
}

它看起来比其他建议更整洁。

答案 3 :(得分:2)

在swift 3中,它现在是index.ts#file

希望有所帮助。

答案 4 :(得分:0)

我认为以下是您想要的(在Swift 2.1及更高版本中):

print("\(__FUNCTION__) in \(self.dynamicType)")

答案 5 :(得分:0)

print("=== \(type(of: self)).\(#function):\(#line) - message")

结果

=== HomeScene.onAppear():189 - message