2017-01-06 2 views
4

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

Очень хотелось бы увидеть, если у вас есть какие-либо мысли, помимо ручного усилия здесь. Благодаря!

ответ

1

Вы не можете. Имена переменных являются абстракцией строго для программистов. Компилятор просто занимается регистрами и адресами памяти. Для такой работы необходимо будет быть явным языком, который он (в настоящее время) не является