C++ 和 Swift 彼此不喜欢
C++ and Swift Don't Like Each Other
我正在尝试在 Swift 中使用名为 MP4v2 的 C++ 库。它主要是因为我可以调用一些函数,使用一些 类,等等
我在使用 returns 空指针的特定函数时遇到问题。失败时为 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
永远不会是真的,即使函数失败了。我做错了什么?
查看 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 中检查 return 值,如下所示:
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
}
我知道你试过了。它应该工作,请仔细检查。如果出于某种奇怪的原因这对您不起作用,还有一些其他选择:
- 用 C、C++ 编写一个简单的辅助函数,Objective-C 或者
Objective-C++ 检查句柄是否有效和 return 整数
标志,Swift.
应该很容易理解
- 勾选
h.hashValue
。如果为0,则句柄无效,
否则它是有效的。这是一个糟糕的未记录的 hack,但它有
为我工作。我会远离这个。
我正在尝试在 Swift 中使用名为 MP4v2 的 C++ 库。它主要是因为我可以调用一些函数,使用一些 类,等等
我在使用 returns 空指针的特定函数时遇到问题。失败时为 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
永远不会是真的,即使函数失败了。我做错了什么?
查看 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 中检查 return 值,如下所示:
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
}
我知道你试过了。它应该工作,请仔细检查。如果出于某种奇怪的原因这对您不起作用,还有一些其他选择:
- 用 C、C++ 编写一个简单的辅助函数,Objective-C 或者 Objective-C++ 检查句柄是否有效和 return 整数 标志,Swift. 应该很容易理解
- 勾选
h.hashValue
。如果为0,则句柄无效, 否则它是有效的。这是一个糟糕的未记录的 hack,但它有 为我工作。我会远离这个。