字符串传输
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.
我想 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.