'String' 不符合预期类型 'CVarArg'

'String' does not conform to expected type 'CVarArg'

当我尝试使用 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 格式字符串作为第一个参数, 紧随其后 由参数列表代替占位符 在格式字符串中(比较 String Format Specifiers)。

在 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", [=11=])
}

看来你用的是Vapor框架,我引用:

Not all of the core libs (Foundation) is available on Linux yet.

你在 Vapor 上创建的问题已经得到了答案: https://github.com/vapor/vapor/issues/870