我有下面的代码,其中我的 swift 代码调用 cpp 函数。在此,swift 调用 cpp 函数并将 swift 'String' 作为参数传递给它,然后在 cpp 代码中将其作为 'const char *' 接收。此转换工作正常,没有任何错误。这是 cpp-swift 互操作中记录的行为吗?使用安全吗?
迅捷的一面:
internal static func CharCheck (pSentence: String) -> Void
{
TWSoundLogic.CharacterSoundCount (pSentence)
}
在C++方面,
void TWSoundLogic::CharacterSoundCount (const char * pSentence)
{
..
}
但是,在从 swift 函数返回 String 类型并尝试在 c++ 中将其作为 const char* 接收时,它会在 cpp 中给出错误。下面是代码。
没有从 'swift::String' 到 'const char *' 的可行转换
迅捷的一面:
internal static func CharCheck () -> String
{
..
return sentence
}
在C++方面,
void TWSoundLogic::CharacterSoundCount (const char * pSentence)
{
const char * cppsentence = swiftClass::CharCheck(); //error
}
。为什么它不允许返回,但允许作为参数传递?有人可以解释这种行为吗?
Swift 使用多种不同的内部存储方法来存储 String 对象。我建议如下:
使用特定编码(如 UTF8)将字符串转换为
Data
。
将生成的
Data
(这是一个内存缓冲区)作为 Char * 传递给 C++。您需要计算出生成的内存的所有权。 (我还没有处理过 Swift 和 C++ 之间的互操作性,所以我不知道如何去做。)
您的 C++ 代码需要编写以采用编码(例如 UTF8)