[解決済み] NSLog(@"%s", __PRETTY_FUNCTION__) の Swift 代替はあるか?
2023-03-18 19:49:12
質問
Objective Cでは、呼び出されたメソッドをログに記録することができます。
NSLog(@"%s", __PRETTY_FUNCTION__)
通常、これはロギングマクロから使用されます。
Swiftはマクロをサポートしていない(と思う)けれども、私はまだ、呼び出された関数の名前を含む一般的なログステートメントを使いたいと考えています。それはSwiftで可能ですか?
更新しました。 私は現在、ロギングにこのグローバル関数を使用しています。 https://github.com/evermeer/Stuff#print そして、あなたはそれを使用してインストールすることができます。
pod 'Stuff/Print'
以下はそのコードです。
public class Stuff {
public enum logLevel: Int {
case info = 1
case debug = 2
case warn = 3
case error = 4
case fatal = 5
case none = 6
public func description() -> String {
switch self {
case .info:
return "❓"
case .debug:
return "✳️"
case .warn:
return "⚠️"
case .error:
return "????"
case .fatal:
return "????"
case .none:
return ""
}
}
}
public static var minimumLogLevel: logLevel = .info
public static func print<T>(_ object: T, _ level: logLevel = .debug, filename: String = #file, line: Int = #line, funcname: String = #function) {
if level.rawValue >= Stuff.minimumLogLevel.rawValue {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss:SSS"
let process = ProcessInfo.processInfo
let threadId = "?"
let file = URL(string: filename)?.lastPathComponent ?? ""
Swift.print("\n\(level.description()) .\(level) ⏱ \(dateFormatter.string(from: Foundation.Date())) ???? \(process.processName) [\(process.processIdentifier):\(threadId)] ???? \(file)(\(line)) ⚙️ \(funcname) ➡️\r\t\(object)")
}
}
}
というように使うことができます。
Stuff.print("Just as the standard print but now with detailed information")
Stuff.print("Now it's a warning", .warn)
Stuff.print("Or even an error", .error)
Stuff.minimumLogLevel = .error
Stuff.print("Now you won't see normal log output")
Stuff.print("Only errors are shown", .error)
Stuff.minimumLogLevel = .none
Stuff.print("Or if it's disabled you won't see any log", .error)
という結果になる。
✳️ .debug ⏱ 02/13/2017 09:52:51:852 ???? xctest [18960:?] ???? PrintStuffTests.swift(15) ⚙️ testExample() ➡️
Just as the standard print but now with detailed information
⚠️ .warn ⏱ 02/13/2017 09:52:51:855 ???? xctest [18960:?] ???? PrintStuffTests.swift(16) ⚙️ testExample() ➡️
Now it's a warning
???? .error ⏱ 02/13/2017 09:52:51:855 ???? xctest [18960:?] ???? PrintStuffTests.swift(17) ⚙️ testExample() ➡️
Or even an error
???? .error ⏱ 02/13/2017 09:52:51:855 ???? xctest [18960:?] ???? PrintStuffTests.swift(21) ⚙️ testExample() ➡️
Only errors are shown
どのように解決するのですか?
Swift には
#file
,
#function
,
#line
と
#column
. から
Swift プログラミング言語
:
#file
- 文字列 - それが表示されるファイルの名前。
#line
- Int - これが表示される行番号です。
#column
- Int - それが始まる列番号です。
#function
- String - これが現れる宣言の名前です。
関連
-
[解決済み] dispatch_after - GCD in Swift?
-
[解決済み] 使用しているSwiftのバージョンを確認するにはどうすればよいですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] Swiftの@selector()?
-
[解決済み] Swift: print() vs println() vs NSLog()
-
[解決済み] Swiftで値を増加させた配列を作成する方法は?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
swift 4.0でのdispatch_async,dispatch_afterの使用について
-
[解決済み】Swiftで変数の型またはクラスを表示するにはどうすればよいですか?
-
[解決済み] Swift 3でカスタム通知を作成するには?
-
[解決済み] Swiftで複数のカスタムセルを持つUITableview
-
[解決済み] ""内の二重引用符を印刷するには?
-
[解決済み] Swift: インデックスで文字列配列を置換する
-
[解決済み] Swift - 複数条件でオブジェクトの配列を並べ替える
-
[解決済み] Swiftで失敗しないイニシャライザーを実装するためのベストプラクティス
-
[解決済み] SwiftUI のテキストのフォントサイズをカスタマイズする
-
[解決済み] Xcode playgrounds が Sources フォルダにある swift ファイルにアクセスできない。