2016-04-01 9 views
1

#file#function#lineのいずれかの方法で印刷したいと思います。とにかくログ機能を使用していますか?

私は以下のコードを試しましたが、問題はここにあります。 私がlogm()と呼んでいるところでは、それは@inlineと宣言しても、常にlogmメソッドの情報を出力します。

@inline(__always) func logm(items: Any...) { 
    if let f = #file.componentsSeparatedByString("/").last { 
     print("[\(f)][\(#function)][\(#line)]:", items) 
    } else { 
     print("[\(#function)][\(#line)]: ", items) 
    } 
} 

このようなことを実装するにはどうしますか? @inlineが期待どおりに機能するのはなぜですか?

+0

https://gist.github.com/xmzio/fccd29fc945de7924b71 – JAL

+0

私はこれを再開するために投票していますなぜなら、オリジナルの「マクロスウィフト?」は、この質問に特に詳細にも類似していないからです。答えは似ているかもしれませんが、文脈は異なります。 – jtbandes

+0

@jtbandesありがとうございました。 '@inline'が私が期待したようにうまくいかなかった理由を知りたい。 – Ryan

答えて

1

デフォルト値として指令にパラメータとしてファイル、行、および関数を渡すことができます。

func logm(items: Any..., file: String = #file, line: Int = #line, function: String = #function) { 
    if let f = file.componentsSeparatedByString("/").last { 
     print("[\(f)][\(function)][\(line)]:", items) 
    } else { 
     print("[\(function)][\(line)]: ", items) 
    } 
} 
+0

実際には、varidicのパラメータ 'items'が最初のものでなければなりません。さもなければデフォルト値を使用できなくなります。 – Sulthan

+0

ありがとう@シュルハン、私は私の答えを更新しました。 @ trick14、デフォルト値では、明示的にそれらのパラメータを渡さずに 'logm'を呼び出すことができます。 – jtbandes

関連する問題