我所阅读的大部分内容都让我相信目前不可能做到这一点,但我很好奇是否有人知道如何在Swift中打印变量的实际名称。
我的用例是为了调试/记录目的,以帮助准确追踪guard语句中错误的源头。我希望不需要手动传递字符串,只需在函数签名中拥有默认参数即可。此外,由于guard语句是常见的Swift约定,因此对于像我这样执行此操作的人和其他人来说,这可能是一个巨大的时间节省器,并且比每次手动输入要可靠得多......
更或少我所想的就是以下内容,同时我可能会利用其他信息,例如
我的用例是为了调试/记录目的,以帮助准确追踪guard语句中错误的源头。我希望不需要手动传递字符串,只需在函数签名中拥有默认参数即可。此外,由于guard语句是常见的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"
希望您能在手动努力之外提出任何想法。谢谢!