如何在swift中调用c函数“TIFFGetField” 有没有人有想法或给我样品?感谢
//The function declared
extern int TIFFGetField(TIFF* tif, uint32 tag, ...);
/* sample: in objective-c is working very well */
unsigned int width;
TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &width);
/* sample: in swift failed */
var width: UInt32 = 0
TIFFGetField(tiff, uint32(TIFFTAG_IMAGEWIDTH), &width)
/* error message:
* 'TIFFGetField' is unavailable: Variadic function is unavailable
*/
答案 0 :(得分:1)
如我的评论所述,Swift中没有基于C的可变参数函数。在您的情况下,一个很好的选择是使用TIFFVGetField
。
只要看到函数签名和man文档,您可能需要编写如下内容:
(请参阅更新。)
var width: UInt32 = 0
withUnsafeMutablePointer(&width) {widthPtr in
let args: [CVarArgType] = [widthPtr]
TIFFVGetField(tiff, UInt32(TIFFTAG_IMAGEWIDTH), getVaList(args))
}
(更新)抱歉,我一直在想苹果公司说应该避免这个功能getVaList
。建议使用withVaList
,上面的代码可以改写为:
var width: UInt32 = 0
withUnsafeMutablePointer(&width) {widthPtr in
withVaList([widthPtr]) {vaListPtr in
TIFFVGetField(tiff, UInt32(TIFFTAG_IMAGEWIDTH), vaListPtr)
}
}
(谢谢,Martin R。)
请尝试。