更新:此问题已不再适用,因为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
纳入其中
答案 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...
}