字符串传输

时间:2018-03-25 10:57:51

标签: swift string objective-c++

我想使用此代码将String返回给Swift:

MyFile.h

+ (char *) myCoolCode;

MyFile.mm

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

MyFile.swift

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

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

See this image

1 个答案:

答案 0 :(得分:0)

正如其他人已经在评论中指出的那样,您应该将.mm文件的返回类型修改为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;
}

然后在你的快速代码中:

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

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

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