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)"
}
这就是我在检查这样一个方法声明时得到的结果:。谢谢这就是我在检查这样一个方法声明时得到的结果:。谢谢