我正在尝试在Swift中使用名为MP4v2的C ++库。它主要是工作,我可以调用一些函数,使用一些类等。
我遇到了一个返回void指针的特定函数的问题。失败时NULL
,或成功的其他价值。有一个常量定义来检查,但既不检查也不检查nil是否有效。
if file != MP4_INVALID_FILE_HANDLE {
抛出/<path_to_project>/main.swift:19:12: Use of unresolved identifier 'MP4_INVALID_FILE_HANDLE'
,但它存在(其他常量起作用)。
if file != NULL
只会导致同样的问题,if file != nil
永远不会成立,即使函数失败也是如此。我做错了什么?
答案 0 :(得分:1)
查看MP4v2文档,以下是检查无效句柄的宏的定义:
#define MP4_INVALID_FILE_HANDLE ((MP4FileHandle)NULL)
它无法在Swift中使用的原因是因为它涉及NULL
。事实上,如果你定义类似
#define MY_NULL NULL
在您的Objective-C(++)代码中并尝试在Swift中使用它,Swift会建议您使用nil
代替。
句柄类型MP4FileHandle
是
typedef void * MP4FileHandle
所以,如果你正在调用像
这样的函数MP4FileHandle aCPPFunction()
你应该能够在Swift中检查返回值:
let h : MP4FileHandle = aCPPFunction()
if h != nil
{
// The handle is valid and can be given as an argument to
// other library functions.
}
else
{
// The handle is NULL
}
我知道你试过这个。它应该工作,请仔细检查。如果由于任何奇怪的原因,这对你不起作用,还有其他一些选择:
h.hashValue
。如果为0,则句柄无效,
否则它是有效的。这是一个糟糕的无证件黑客,但它有
为我工作。我会远离这一个。