在Swift中访问/打印/记录变量名称

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

希望您能在手动努力之外提出任何想法。谢谢!

1个回答

1
你做不到。变量名是一个抽象概念,严格来说只适用于程序员。编译器只处理寄存器和内存地址。为了使这样的事情起作用,它需要成为一种明确的语言特性,而目前(还)不是这样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接