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

Ios 在Swift中打印当前文件的类名,ios,swift,Ios,Swift,我正在尝试用Swift打印当前类的名称。更具体地说,我希望实现以下输出: myFunction() in ClassContainingTheFunction 我有打印好的函数名。这是我最近一次打印类名和函数名: println("\(__FUNCTION__) in \(__FILE__)") 印刷品 myFunction() in path/to/TheFile.swift 及 印刷品 myFunction() in [mangled class name here] 这两个都很

我正在尝试用Swift打印当前类的名称。更具体地说,我希望实现以下输出:

myFunction() in ClassContainingTheFunction
我有打印好的函数名。这是我最近一次打印类名和函数名:

println("\(__FUNCTION__) in \(__FILE__)") 
印刷品

myFunction() in path/to/TheFile.swift

印刷品

 myFunction() in [mangled class name here]

这两个都很接近我想要的,但是路径很长,与我在代码中看到的名称相比,被损坏的类名可能非常不可读。

因此,您的问题只是所示字符串的长路径。 我最好的办法是将字符串缩短为文件名

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\u getClassNAme(…)
将使用实际使用的类,而不是像类集群那样使用的名称,因此这对您来说是错误的。不过,学习具体的类实现名称会更容易


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

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

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

我的简短回答是

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

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

OnboardingGetStartedController-viewDidLoad()

因此,我在utils类中加入了一个简短的函数,如下所示:

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

    var fileName = fileStr.components(separatedBy: "/").last ?? ""
    fileName = fileName.components(separatedBy:".").first ?? ""
    let printFunc = "\(fileName) - \(funcStr)"
    print(printFunc)
}
Utils.logCurrentFunc(#file, funcStr: #function)
我在应用程序的任何地方都会这样称呼它:

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

    var fileName = fileStr.components(separatedBy: "/").last ?? ""
    fileName = fileName.components(separatedBy:".").first ?? ""
    let printFunc = "\(fileName) - \(funcStr)"
    print(printFunc)
}
Utils.logCurrentFunc(#file, funcStr: #function)

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

在swift 3中,它现在是
\file
\function

希望有帮助

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

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

第一个链接可能是@LouFranco的副本:我不想找出类型。我正在尝试打印
println()
调用所在的类的名称。对于第二个链接:这个问题有一个公认的答案,它不是我想要的。我也不担心找到任何对象的类,我想知道当前类的名称。这并不能回答他想要的[[自我类]描述]等价物的问题。@kubbing应该在八月份你发表评论时回答你,对不起。说清楚一点,这确实满足了我的要求。您建议打印对象的名称,我想要调用func的文件的名称。不一定是一样的。在Swift 2.2中,使用#函数和#文件,而不是#函数和#文件。这可不是一回事。这是对象的名称。我想要调用func的文件名。接受的答案仍然需要一些更新,因为您现在必须强制转换为NSString,println是print,但它仍然是正确的。谢谢你的意见。