我在这个主题上阅读的大部分内容让我相信此刻不可能,但我很好奇是否有人知道如何打印变量的实际名称迅速。
我的用例专门用于调试/记录,以帮助准确地跟踪保护语句中的错误来源。我希望我不需要手动传入一个字符串,只能在函数签名中有一个默认参数。此外,由于守护语句是一种常见的Swift约定,对于我自己和其他可能做类似这样的事情,这可能比每次执行时节省大量时间并且更可靠...
我或多或少地想到的是 - 我可能会在#file
函数
#line
,guarded()
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"
很想看看你是否有任何超出人工努力的想法。谢谢!
答案 0 :(得分:1)
你做不到。变量名是一种抽象,严格来说是程序员。编译器只处理寄存器和内存地址。要使这样的事情起作用,它需要是一个明确的语言特征,它(当前)不是