字符串传输

String transfer

我想 return 使用此代码 String 回到 Swift:

MyFile.h:

+ (char *) myCoolCode;

MyFile.mm:

+(string)myCoolCode {
   string myCoolString = "";
   myCoolString += "123";
   return myCoolString;
}

MyFile.swift:

let superCoolString = MyBridge.myCoolCode()
print(superCoolString)

但显然它似乎并没有以正确的方式工作,因为它在内心深处的某个地方崩溃了。

正如其他人已经在评论中指出的那样,您应该将 .mm 文件的 return 类型修复为 char * 而不是 string。你应该始终保持这两种类型相同。您的函数实现示例可以是:

- (char *)myCoolCode
{
    char str[] = "foobar";
    //You can do whatever you want with str here. Just make sure it's null terminated
    return str;
}

然后在您的 swift 代码中:

let myCoolString = String(cString: MyBridge.myCoolCode())
print(myCoolString)

对字符串构造函数的引用是here.

您的代码崩溃的原因可能是因为您正在 return 创建一个 std::string 的实例,它在 Swift 中不起作用。您可以使用 std::string,但在 return 时必须将其转换为 char *。你可以这样做 shown here.