Swift 如何获得#函数或#线的期望值?

Swift 如何获得#函数或#线的期望值?,swift,Swift,我有一个包含#function和#line的函数,该函数返回一个字符串: func exportMessage(content: String) -> String { if let fileURL = URL(string: #file) { return "\(fileURL.lastPathComponent): \(#function) - Line: \(#line)\n\(content)" } return

我有一个包含
#function
#line
的函数,该函数返回一个字符串:

func exportMessage(content: String) -> String {
    if let fileURL = URL(string: #file) {
        return "\(fileURL.lastPathComponent): \(#function) - Line: \(#line)\n\(content)"
    }
    
    return "\(#function) - Line: \(#line)\n\(content)"
}
尝试在另一个函数中使用上述函数时:

func doSomething() {
    let result = exportMessage(content: "instance is nil")
    print(result)
}
输出为:

myplayerly.playerly:exportMessage(内容:)-行:5

实例为零

它包含“exportMessage”,但不包含“doSomething”作为函数名(
#function
)。行号也一样,它是
exportMessage()
中的行号,但不是
doSomething()
中的行号

我希望得到
doSomething()
的函数名和行号,如下所示:

myplayery.playery:doSomething()-行:12

实例为零


由于我的目标是在许多函数中使用
exportMessage
,因此我假设它应该引用调用者函数。这是可以实现的吗?怎么做?

你的建议没有真正意义,因为它不清楚“应该打印哪个呼叫者”?为什么要做某事?为什么不调用
doSomething
?还是来电者的来电者?最终,如果这就是
#函数
和friends的行为方式,它只会从
libdyld.dylid
打印
start

要实现所需的行为,必须手动从父上下文中拉入
#函数
#行
值:

func exportMessage(
    content: String,
    callingFunction: String = #function,
    callingLine: Int = #line
) -> String {
    if let fileURL = URL(string: callingFunction) {
        return "\(fileURL.lastPathComponent): \(callingFunction) - Line: \(callingLine)\n\(content)"
    }

    return "\(callingFunction) - Line: \(callingLine)\n\(content)"
}

func doSomething() {
    let result = exportMessage(content: "instance is nil")
    print(result)
}

你的建议没有真正意义,因为它不清楚“应该打印哪个呼叫者”?为什么要做某事?为什么不调用
doSomething
?还是来电者的来电者?最终,如果这就是
#函数
和friends的行为方式,它只会从
libdyld.dylid
打印
start

要实现所需的行为,必须手动从父上下文中拉入
#函数
#行
值:

func exportMessage(
    content: String,
    callingFunction: String = #function,
    callingLine: Int = #line
) -> String {
    if let fileURL = URL(string: callingFunction) {
        return "\(fileURL.lastPathComponent): \(callingFunction) - Line: \(callingLine)\n\(content)"
    }

    return "\(callingFunction) - Line: \(callingLine)\n\(content)"
}

func doSomething() {
    let result = exportMessage(content: "instance is nil")
    print(result)
}
使用
#function
#line
作为方法中的默认值。默认值在调用时计算

func exportMessage(content: String, file: String = #file, function: String = #function, line: Int = #line) -> String {
    if let fileURL = URL(string: file) {
        return "\(fileURL.lastPathComponent): \(function) - Line: \(line)\n\(content)"
    }

    return "\(function) - Line: \(line)\n\(content)"
}
使用
#function
#line
作为方法中的默认值。默认值在调用时计算

func exportMessage(content: String, file: String = #file, function: String = #function, line: Int = #line) -> String {
    if let fileURL = URL(string: file) {
        return "\(fileURL.lastPathComponent): \(function) - Line: \(line)\n\(content)"
    }

    return "\(function) - Line: \(line)\n\(content)"
}

这就是我在检查这样一个方法声明时得到的结果:。谢谢这就是我在检查这样一个方法声明时得到的结果:。谢谢