我在我的iOS Swift项目中使用libxml。要调试,我需要从Swift调用以下C函数:
void xmlDebugDumpString (FILE * output, const xmlChar * r)
但是,我不知道如何在Swift中创建FILE * output
指针。
我尝试了以下代码:
let debugDoc: UnsafeMutablePointer<FILE>
debugDoc = fopen(debugDocURL.absoluteString, "w")
xmlDebugDumpNode(debugDoc, str)
代码可以正常编译,但是会出现以下运行时错误
线程1:致命错误:在展开可选值时意外发现nil
答案 0 :(得分:1)
问题是absoluteString
的使用错误,因此fopen()
失败并返回nil
。从URL创建C字符串的正确方法是withUnsafeFileSystemRepresentation
:
guard let debugFile = debugDocURL.withUnsafeFileSystemRepresentation( { fopen($0, "w") }) else {
// Could not open file ...
}
现在您可以写入文件了
xmlDebugDumpNode(debugFile, ...)
并最终将其关闭:
fclose(debugFile)
另一种选择是将调试输出转储到(预定义) “标准错误”文件:
xmlDebugDumpNode(stderr, ...)