如何将CString传递给CVarArg?

时间:2014-06-13 19:25:32

标签: swift variadic-functions

更新:此问题已不再适用,因为Xcode 6 beta 4中已删除CString


在C中,我可以将C字符串(const char *)传递给采用varargs的C函数。

现在我想在一个CString的Swift中做同样的事情。我知道在Swift中我无法直接访问C varargs函数,但是我可以访问带有va_list的C函数,它在Swift中变为CVaListPointer,我可以使用getVaList()来实现根据{{​​3}}的CVarArg数组。

我可以成功地将整数(Int)和对象(NSObject)放入CVarArg数组中,但没有问题,但我无法弄清楚如何得到{{1进入CString

查看标准库中符合CVarArg的类型,我发现有一个CVarArg,但我无法弄清楚如何将COpaquePointer纳入其中

1 个答案:

答案 0 :(得分:1)

这是在测试版3上测试的:

let myString = "abc123"
let myStringC = myString.cStringUsingEncoding(NSUTF8StringEncoding)!

myStringC.withUnsafePointerToElements {
    (myStringPtr: UnsafePointer<CChar>) -> () in
    var varargs = [COpaquePointer(myStringPtr)]
    let va_list = getVaList(varargs)
    // Use va_list...
}