gpt4 book ai didi

swift - 如何获取#function 或#line 的期望值?

转载 作者:行者123 更新时间:2023-11-28 10:36:23 24 4
gpt4 key购买 nike

我有一个包含 #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)"
}

当试图在另一个函数中使用 exportMessage 上面的函数时:

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

输出是:

MyPlayground.playground: exportMessage(content:) - Line: 5

instance is nil

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

我的期望是获取函数名称和 doSomething() 的行号,如:

MyPlayground.playground: doSomething() - Line: 12

instance is nil

因为我的目标是在许多函数中使用 exportMessage,所以我假设它应该引用调用函数。它可以实现吗?怎么办?

最佳答案

您提出的建议实际上没有意义,因为不清楚“应该打印哪个调用者”?为什么要doSomething?为什么不是 doSomething 的调用者?还是来电者的来电者?最终,如果这是 #function 和 friend 的行为方式,它只会从 libdyld.dylid 打印 start

要实现您想要的行为,您必须从父上下文中手动拉入 #function#line 值:

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)
}

关于swift - 如何获取#function 或#line 的期望值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53417249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com