'字符串'不符合预期类型' CVarArg'

时间:2017-03-08 11:50:27

标签: swift vapor

当我尝试记录时,我正面临此错误。

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

mycode的

        if fileManager.fileExists(atPath: (drop.config["servers", "default", "KeyURL"]?.string ?? "default")) {
            NSLog("FILE AVAILABLE", "TESTNOTI")
        } else {
            NSLog("FILE NOT AVAILABLE", "TESTNOTI")
        }

2 个答案:

答案 0 :(得分:12)

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", $0)
}

答案 1 :(得分:1)

您似乎正在使用Vapor框架,我引用:

  

并非所有的核心库(基础)都可以在Linux上使用。

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