2017-01-06 13 views
4

この件に関して私が読んできたことの多くは、現時点では不可能であると信じていますが、誰かが変数の実際の名前スウィフトでSwiftのアクセス/プリント/ログ変数名

私の使用例は、ガードステートメントのエラーの原因を正確に追跡するためのデバッグ/ロギングのためのものです。私は、手動で文字列を渡す必要はなく、関数のシグネチャにはデフォルトのパラメータを持つことができます。また、ガード・ステートメントは一般的なスウィフト・コンベンションであるため、このようなことをしている自分自身や他の人にとって、これは時間を節約することができます。

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!") 
} 
:以下私が考えていることは、私はおそらくこのような状況で有用であろう 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 
    } 
} 

#file#lineのような他の情報を利用することになる、プラス以下の通りですそれは呼ばれています次に

、:

sampleFunction(funkyVariable: "string", boringVariable: nil) 
// Results in logger message: "Guard statement failed to unwrap variable: boringVariable in function: sampleFunction" 

はあなたがここに手動努力を超えた任意の考えを持っているかどうかを確認するのが大好きです。ありがとう!

答えて

1

できません。変数名は厳密にはプログラマにとって抽象です。コンパイラはレジスタとメモリアドレスを処理するだけです。そのようなことが機能するには、明示的な言語機能である必要がありますが、それは現在ではありません。