Большая часть того, что я читал по этому вопросу, заставляет меня думать, что это невозможно в данный момент, но мне любопытно, знает ли кто, как печатать фактическое имя переменной в Свифт.Имя переменной доступа/печати/журнала в Swift
Мой прецедент здесь специально предназначен для отладки/ведения журнала, чтобы помочь с точным отслеживанием источника ошибки в инструкции охраны. Я надеюсь, что мне не нужно вручную передавать строку и может просто иметь параметр по умолчанию в сигнатуре функции. Кроме того, поскольку заявления о защите являются обычным соглашением 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"
Очень хотелось бы увидеть, если у вас есть какие-либо мысли, помимо ручного усилия здесь. Благодаря!