如何在Swift中使用CVaListPointer参数调用方法

mik*_*wan 9 logging nslog swift swift2

我该如何调用以下方法?该方法属于打印日志的类.

func log(format: String!, withParameters valist: CVaListPointer)
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标在Objective-C中看起来像这样:

NSLog(@"Message %@ - %@", param1, param2);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Mar*_*n R 17

CVaListPointer是Swift等效的C va_list类型,可以[CVarArgType]使用数组创建withVaList().

例:

func log(format: String!, withParameters valist: CVaListPointer) {
    NSLogv(format, valist)
}

let args: [CVarArgType] = [ "foo", 12, 34.56 ] 
withVaList(args) { log("%@ %ld %f", withParameters: $0) }
Run Code Online (Sandbox Code Playgroud)

输出:

2016-04-27 21:02:54.364 prog[6125:2476685] foo 12 34.560000

对于Swift 3,替换CVarArgTypeCVarArg.

  • 对于采用`CVarArg`而不是`CVaListPointer`的函数,你能推荐什么? (2认同)