将 swift 中的“String”类型转换为 cpp 中的“const char *”

问题描述 投票:0回答:1

我有下面的代码,其中我的 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
}

。为什么它不允许返回,但允许作为参数传递?有人可以解释这种行为吗?

c++ swift interop
1个回答
0
投票

Swift 使用多种不同的内部存储方法来存储 String 对象。我建议如下:

使用特定编码(如 UTF8)将字符串转换为

Data

将生成的

Data
(这是一个内存缓冲区)作为 Char * 传递给 C++。您需要计算出生成的内存的所有权。 (我还没有处理过 Swift 和 C++ 之间的互操作性,所以我不知道如何去做。)

您的 C++ 代码需要编写以采用编码(例如 UTF8)

© www.soinside.com 2019 - 2024. All rights reserved.