NSLog
を使用してログを記録しようとすると、次のエラーが発生します。
remote: /tmp/build_f459d376d1bc10ac2e93e52575ac5ea9/Sources/App/main.Swift:368:49: error: argument type 'String' does not conform to expected type 'CVarArg' remote: NSLog("FILE NOT AVAILABLE", "TESTNOTI") remote: ^~~~~~~~~~ remote: as! CVarArg
これが私のコードです:
if fileManager.fileExists(atPath: (drop.config["servers", "default", "KeyURL"]?.string ?? "default")) {
NSLog("FILE AVAILABLE", "TESTNOTI")
} else {
NSLog("FILE NOT AVAILABLE", "TESTNOTI")
}
なぜこれが発生し、どうすれば修正できますか?
NSLog
は、最初の引数として形式の文字列を取り、その後に引数のリストが続きます。これらの引数は、フォーマット文字列(比較 文字列フォーマット指定子 )。
Appleプラットフォームでは、%@
形式を使用してString
を印刷できます。
let fileName = "the file"
NSLog("File not found: %@", fileName)
ただし、これはLinuxプラットフォーム(Vaporなど)では機能しません。ここでは、Swift文字列をC文字列に変換して、引数としてNSLogに渡す必要があります(C文字列には%s
形式を使用します)。
let fileName = "the file"
fileName.withCString {
NSLog("File not found: %s", $0)
}
あなたはVaporフレームワークを使用しているようです、そして私は引用します:
Linuxではまだすべてのコアライブラリ(Foundation)が利用できるわけではありません。
Vaporで作成した問題は、すでに回答を得ています: https://github.com/vapor/vapor/issues/87