我在这个主题上阅读的大部分内容让我相信目前这是不可能的,但我很好奇是否有人知道如何在
Swift中打印变量的实际名称.
我的用例专门用于调试/记录,以帮助准确地跟踪保护语句中的错误源.我希望我不需要手动传入一个字符串,只能在函数签名中有一个默认参数.此外,由于守护语句是一种常见的Swift约定,对于我自己和其他可能做类似这样的事情,这可能比每次执行此操作时节省大量时间并且更可靠…
或多或少我正在考虑的是 – 以及我可能会在guarded()函数中使用#file,#line等其他信息
extension Optional { func guarded(variableName: String = #variableName,caller: String = #function) -> Optional { if self == nil { log.warning(message: "Guard statement Failed to unwrap variable: \(variableName) in function: \(function)") } return self } }
在这种情况下哪个会有用:
func sampleFunction(_ funkyVariable: String?,boringVariable: String?) { guard let funkyVariable = funkyVariable.guarded(),let boringVariable = boringVariable.guarded() else { // Custom handling of else condition if necessary return } print("\(funkyVariable) and \(boringVariable) aren't nil!") }
然后,当它被称为:
sampleFunction(funkyVariable: "string",boringVariable: nil) // Results in logger message: "Guard statement Failed to unwrap variable: boringVariable in function: sampleFunction"
很想看看你是否有任何超出人工努力的想法.谢谢!
解决方法
你不能.变量名是一种抽象,严格来说是程序员.编译器只处理寄存器和内存地址.为了使这样的事情起作用,它需要是一个明确的语言特征,它(当前)不是
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。